当前位置:网站首页>C语言课设学生选修课程系统(大作业)
C语言课设学生选修课程系统(大作业)
2022-07-01 06:17:00 【普通学长】

一、设计功能(文章仅供参考)
(1)系统以菜单方式工作;
(2)课程信息和学生信息的录入功能(课程信息有文件保存)----输入;
(3)课程信息浏览功能----输出;
(4)查询功能(至少一种查询方式)—算法;
(5)按学分查询;
(6)某门课程学生选修情况(可选项)。
二、功能展示




三、思维导图



四、程序源码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int N1,N2;
int n=0;
struct course
{
int num1; //课程编号
char name1[20];
char major[20];
char type[20];
int credit;
int period;
char teacher[20];
int people; //选此门课程的人数
struct course *next; }; //结构体指针
struct student
{
int num2;
char name2[20];
int nelenum[50]; //所选课程编号
int nelen; //所选课程学分和
struct student * next;};
struct course * head1;
struct student * head2;
void zhang() //从键盘录入课程信息
{
struct course *p1,*p2;
N1=0;
p1=p2=(struct course *)malloc(sizeof(struct course));
int y,n;
if(n==0)
do
{
printf("--------------------\n");
printf("请输入课程编号:");
scanf("%d",&p1->num1);
printf("请输入课程名称:");
scanf("%s",p1->name1);
printf("请输入主修:");
scanf("%s",p1->major);
printf("请输入课程性质:");
scanf("%s",p1->type);
printf("请输入学分:");
scanf("%d",&p1->credit);
printf("请输入课时:");
scanf("%d",&p1->period);
printf("请输入教师名称:");
scanf("%s",p1->teacher);
n++;
p1++;
printf("\n1.继续输入.\n0.输入完毕.\n");
printf("请选择:");
scanf("%d",&y);
}
while(y==1);
printf("提示:输入完毕!你一共输入%d个\n",n);
}
void zhang1() //从文件录入课程信息
{
FILE * fp;
char filepath[20];
struct course *p1,*p2;
N1=0;
printf("请输入您要读取的路径:");
getchar();
gets(filepath);
if((fp=fopen(filepath,"r"))==NULL)
{
printf("找不到 %s 文件!\n",filepath);
exit(0);
}
p1=p2=(struct course*)malloc(sizeof(struct course));
fscanf(fp,"%d%s%s%s%d%d%s%d",&p1->num1,p1->name1,p1->major,p1->type,&p1->credit,&p1->period,p1->teacher,&p1->people);
while(!feof(fp))
{
N1=N1+1;
if(N1==1)
head1=p1;
else
p2->next=p1;
p2=p1;
p1=(struct course * )malloc(sizeof(struct course));
fscanf(fp,"%d%s%s%s%d%d%s%d",&p1->num1,p1->name1,p1->major,p1->type,&p1->credit,&p1->period,p1->teacher,&p1->people);
}
p2->next=NULL;
}
void load() //录入课程信息函数
{
int i;
printf("\t\t\t录入课程信息\n");
printf("\n1.从键盘录入");
printf("\n2.从文件录入");
printf("\n3.返回主菜单\n");
printf("请选择1-3:");
scanf("%d",&i);
switch(i)
{
case 1:zhang();break;
case 2:zhang1();break;
case 3:break; }
}
void insert(struct course *incourse) //增加课程信息
{
struct course *p0,*p1,*p2;
p1=head1;
p0=incourse;
if(head1==NULL)
{
head1=p0;
p0->next=NULL;
}
else
{
while((p0->num1>p1->num1) && (p1->next!=NULL))
{
p2=p1;
p1=p1->next;
}
if(p0->num1<=p1->num1)
{
if(head1==p1)
head1=p0;
else
p2->next=p0;
p0->next=p1;
}
else
{
p1->next=p0;
p0->next=NULL;
}
}
N1=N1+1;
}
void delc(int num1) //删除课程信息
{
struct course *p1,*p2;
if(head1==NULL)
{
printf("\n无法删除!\n");
goto end;
}
p1=head1;
while(num1!=p1->num1 && p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
if(num1==p1->num1)
{
if(p1==head1)
head1=p1->next;
else
p2->next=p1->next;
printf("已删除\n");
N1=N1-1;
}
else
printf("没有此课程\n");
end:;
}
void managementc() //课程信息管理函数
{
struct course * p1;
int i,num1;
printf("\t\t\t课程信息管理\n");
printf("1.添加课程\n");
printf("2.删除课程\n");
printf("3.返回\n");
printf("请输入1-3:\n");
scanf("%d",&i);
switch(i)
{
case 1:{
struct course *p1,*p2;
N1=0;
p1=p2=(struct course *)malloc(sizeof(struct course));
int y,n;
if(n==0)
do
{
printf("--------------------\n");
printf("请输入课程编号:");
scanf("%d",&p1->num1);
printf("请输入课程名称:");
scanf("%s",p1->name1);
printf("请输入主修:");
scanf("%s",p1->major);
printf("请输入课程性质:");
scanf("%s",p1->type);
printf("请输入学分:");
scanf("%d",&p1->credit);
printf("请输入课时:");
scanf("%d",&p1->period);
printf("请输入教师名称:");
scanf("%s",p1->teacher);
n++;
p1++;
printf("\n1.继续输入.\n0.输入完毕.\n");
printf("请选择:");
scanf("%d",&y);
}
while(y==1);
printf("提示:输入完毕!你一共输入%d个\n",n);
} break;
case 2:printf("请输入您要删除的课程编号:\n");
scanf("%d",&num1);
delc(num1);break;
case 3:break;
}
}
void putin(void) //从键盘录入学生信息
{
int i,n,y;
struct student *p1,*p2;
N2=0;
p1=p2=(struct student *)malloc(sizeof(struct student));
do
{
printf("学号:\t");
scanf("%d",&p1->num2);
printf("姓名:\t");
scanf("%s",p1->name2);
p1->nelen=0;
for(i=0;i<20;i++) p1->nelenum[i]=0;
head2=NULL;
n++;
p1++;
printf("\n1.继续输入.\n0.输入完毕.\n");
printf("请选择:");
scanf("%d",&y);
}
while(y==1);
printf("提示:输入完毕!你一共输入%d个\n",n);
}
void putin2() //从文件录入学生信息
{
int i=0;
FILE * fp;
char filepath[20];
struct student *p1,*p2;
N2=0;
printf("请输入您要读取的路径:");
getchar();
gets(filepath);
if((fp=fopen(filepath,"rt"))==NULL)
{
printf("找不到 %s 文件!\n",filepath);
exit(0);
}
p1=p2=(struct student*)malloc(sizeof(struct student));
fread(p1,sizeof(struct student),1,fp);
head2=NULL;
while(!feof(fp))
{
i=0;
N2=N2+1;
if(N2==1)
head2=p1;
else
p2->next=p1;
p2=p1;
p1=(struct student * )malloc(sizeof(struct student));
fread(p1,sizeof(struct student),1,fp);
}
p2->next=NULL;
}
void input() //录入学生信息函数
{
int i;
printf("\t\t\t录入学生信息\n");
printf("\n1.从键盘录入\n");
printf("2.从文件录入\n");
printf("3.返回主菜单\n");
printf("请输入1-3:\n");
scanf("%d",&i);
switch(i)
{
case 1:putin();break;
case 2:putin2();break;
case 3:break;
}
}
void inserts(struct student * incouse) //增加学生信息
{
struct student *p0,*p1,*p2;
p1=head2;
p0=incouse;
if(head2==NULL)
{
head2=p0;
p0->next=NULL;
}
else
{
while((p0->num2>p1->num2) && (p1->next!=NULL))
{
p2=p1;
p1=p1->next;
}
if(p0->num2 <= p1->num2)
{
if(head2==p1) head2=p0;
else p2->next=p0;
p0->next=p1;
}
else
{
p1->next=p0;
p0->next=NULL;}
}
N2=N2+1;
}
void dels(int num2) //删除学生信息
{
struct student *p1,*p2;
if(head2==NULL)
{
printf("\n无法删除\n");
goto end;
}
p1=head2;
while(num2!=p1->num2 && p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
if(num2==p1->num2)
{
if(p1==head2)
head2=p1->next;
else
p2->next=p1->next;
printf("已删除\n");
N2=N2-1;
}
else
printf("没有此学生编号\n");
end:;
}
void managements() //学生信息管理函数
{
struct student * p1;
int i,num2;
printf("\t\t\t学生信息管理\n");
printf("1.添加学生信息\n");
printf("2.删除学生信息\n");
printf("3.返回主菜单\n");
printf("请选择1-3:\n");
scanf("%d",&i);
switch(i)
{
case 1:{
p1=(struct student *)malloc(sizeof(struct student));
p1->nelen=0;
p1->nelenum[0]=0;
printf("num\tname\n");
scanf("%d%s",&p1->num2,p1->name2);
inserts(p1);}break;
case 2:{
printf("请输入您要删除的学生编号:\n");
scanf("%d",&num2);
dels(num2);} break;
case 3:break;
}
}
void elect() //学生选课
{
struct student * s;
struct course * p1;
int a,i,b;
printf("请输入您的学号:\n");
scanf("%d",&a);
s=head2;
while((s->num2)!=a&&s->next!=NULL) s=s->next;
if(s->num2!=a)
{
printf("您的信息不存在,请重新输入:\n");
goto end;
}
if((s->nelen)>10)
{
printf("您的学分已满");
goto end;
}
printf("请输入您要选修的课程编号\n");
scanf("%d",&b);
for(i=0;(s->nelenum[i])==0;i++);
s->nelenum[i]=b;
p1=head1;
while((p1->num1)!=b)
p1=p1->next;
for(i=0;(s->nelenum[i])!=0;i++);
s->nelenum[i]=b;
(p1->people)++;
(s->nelen)=(s->nelen)+(p1->credit);
(p1->people)++;
end:;
}
void back() //学生退课
{
struct student * p;
struct course * p1;
int b,i,j,a;
printf("请输入您的学号:\n");
scanf("%d",&a);
p=head2;
while(p->num2!=a&&p!=NULL) p=p->next;
if(p==NULL)
printf("您的信息不存在:\n");
else
{
printf("请输入您要退选的课程:\n");
scanf("%d",&b);
p1=head1;
while(p1->num1!=b) p1=p1->next;
for(i=0;p->nelenum[i]!=b;i++);
for(j=i;p->nelenum[j]!=0;j++)
p->nelenum[j]=p->nelenum[j+1];
p->nelenum[--j]=0;
(p->nelen)=(p->nelen)-(p1->credit);
(p1->people)--;
printf("succeed!\n");
}
}
void elective() //学生选课信息管理
{
int i;
printf("\t\t\t学生选课信息管理\n");
printf("1.选课\n");
printf("2.退课\n");
printf("3.返回主菜单\n");
printf("请输入1-3:\n");
scanf("%d",&i);
switch(i)
{
case 1:elect();break;
case 2:back();break;
case 3:break;
}
}
void listc() //浏览课程信息
{
struct course * p;
int i,j;
if(n!=0)
{
printf("学生总数:%d\n", n);
printf("课程编号 课程名称 主修 课程性质 学分 课时 教师 选课人数\n");
printf("-----------------------------------------------------\n");
for(i=0;i<n;i++)
printf("%6d%13s%13s%10s%7d%7d%12s%5d\n",&p->num1,p->name1,p->major,p->type,&p->credit,&p->period,p->teacher,&p->people);
}
else printf("提示:无数据,请输入数据!");
}
void lists() //浏览学生信息
{
struct student * p;
int a;
p=head2;
printf("学生编号 学生姓名 所选课程编号 所选课程学分\n");
while(p!=NULL)
{
printf("%6d%13s",&p->num2,p->name2);
printf("%6d",&p->nelen);
for(a=0;p->nelenum[a]!=0&&a<14;a++)
printf("%d",&p->nelenum[a]);
printf("\n");
p=p->next;
}
}
void intoc() //存储课程信息
{
FILE * fp;
struct course * p;
char filepath[30];
printf("输入路径:");
getchar();
gets(filepath);
if((fp=fopen(filepath,"w"))==NULL)
{
printf("\无法储存!");
exit(0);
}
p=head1;
while(p!=NULL)
{
fprintf(fp,"%d%s%s%s%d%d%s%d\n",p->num1,p->name1,p->major,p->type,p->credit,p->period,p->teacher,p->people);
p=p->next;
}
fclose(fp);
printf("已储存入%s文件!\n",filepath);
}
void intos() //存储学生信息
{
FILE * fp;
struct student * p;
char filepath[30];
printf("请输入路径:");
getchar();
gets(filepath);
if((fp=fopen(filepath,"wt"))==NULL)
{
printf("\n 无法储存!");
exit(0);
}
p=head2;
while(p!=NULL)
{
fwrite(p,sizeof(struct student),1,fp);
p=p->next;
}
fclose(fp);
printf("已储存入 %s文件!\n",filepath);
}
void into() //信息存储函数
{
int i;
printf("\t\t\t信息存储\n");
printf("1.课程信息存储\n");
printf("2.学生信息存储\n");
printf("3.返回主菜单\n");
printf("请输入1-3\n");
scanf("%d",&i);
switch(i)
{
case(1):intoc();break;
case(2):intos();break;
case(3):break;
}
}
void store() //信息存储浏览函数
{
int i;
printf("\t\t信息存储和浏览\n");
printf("1.课程信息浏览\n");
printf("2.学生信息浏览\n");
printf("3.信息存储\n");
printf("4.返回主菜单\n");
printf("请输入1-4:\n");
scanf("%d",&i);
switch(i)
{
case(1):listc();break;
case(2):lists();break;
case(3):into();break;
case(4):break;
}
}
void search1() //按学生编号查找学生信息
{
int a,b;
struct student * p;
printf("请输入学生编号");
scanf("%d",&a);
p=head2;
printf("学号 学生姓名 所选课程编号 所选课程学分\n");
while(p!=NULL)
{
if(p->num2==a)
{
printf("%6d%13s ",p->num2,p->name2);
for(b=0;p->nelenum[b]!=0&&b<14;b++)
printf("%d",p->nelenum[b]);
printf("%10d\n",p->nelen);
}
p=p->next;
}
}
void search2() //按学生姓名查找学生信息
{
int b;
char name[20];
struct student * p;
printf("请输入要查找的学生姓名:");
scanf("%s",name);
p=head2;
printf("学号 学生姓名 所选课程编号 所选课程学分\n");
while(p!=NULL)
{
if(strcmp(name,p->name2)==0)
{
printf("%6d%13s ",p->num2,p->name2);
for(b=0;p->nelenum[b]!=0&&b<14;b++)
printf("%d",p->nelenum[b]);
printf("%10d\n",p->nelen);
}
p=p->next;
}
}
void search() //学生信息查找主函数
{
int i;
printf("\t\t\t学生信息查找");
printf("\n1.按学号查找");
printf("\n2.按姓名查找");
printf("\n3.返回主菜单");
printf("\n请输入1-3:");
scanf("%d",&i);
switch(i)
{
case 1:search1();break;
case 2:search2();break;
case 3:break;}}
int main() //主函数
{
char m;
int i;
start:
printf("\t\t\t*******************************\n");
printf("\n\t\t\t\t学生选修课程系统!\n");
printf("\n\t\t\t\t欢迎使用此系统!\n");
printf("\t\t\t*******************************\n");
printf("\n");
printf("\t\t\t\t-----目录-----\n");
printf("\t\t\t|1.录入课程信息\n");
printf("\t\t\t|2.课程信息管理\n");
printf("\t\t\t|3.录入学生信息\n");
printf("\t\t\t|4.学生信息管理\n");
printf("\t\t\t|5.学生选课\n");
printf("\t\t\t|6.信息存储与浏览\n");
printf("\t\t\t|7.查找学生信息\n");
printf("\t\t\t|8.退出系统\n");
printf("选择功能前面的数字进入功能:\n");
scanf("%d",&i);
switch(i)
{
case 1:system("cls");load(); goto start;break;
case 2:system("cls");managementc();goto start;break;
case 3:system("cls");input();goto start;break;
case 4:system("cls");managements();goto start;break;
case 5:system("cls");elective();goto start;break;
case 6:system("cls");store();goto start;break;
case 7:system("cls");search();goto start;break;
case 8:{
system("cls");
printf("Thank you for using this program!\n\nBye-Bye!\n");
}
}
return 0;
}

大家可以点个关注后续会持续更新0.0(在此先谢过各位了)
边栏推荐
- Flink实战--多流合并
- 手把手教你实现一个深度学习框架...
- 【ITSM】什么是ITSM,IT部门为什么需要ITSM
- B-tree series
- Kubedm builds kubenetes cluster (Personal Learning version)
- Dongle data collection
- To sort out the anomaly detection methods, just read this article!
- Infinite horizontal marble game
- One of the characteristic agricultural products that make Tiantou village, Guankou Town, Xiamen into a "sweet" village is
- kubeadm搭建kubenetes 集群(个人学习版)
猜你喜欢

自开发软件NoiseCreater1.1版本免费试用

虚幻 简单的屏幕雨滴后处理效果

Index method and random forest to realize the information of surface water body in wet season in Shandong Province

DHT11 temperature and humidity sensor

Forkjoin and stream flow test

Linux closes the redis process SYSTEMd+

68 cesium code datasource loading czml

How did ManageEngine Zhuohao achieve the goal of being selected into Gartner Magic Quadrant for four consecutive years?
![[self use of advanced mathematics in postgraduate entrance examination] advanced mathematics Chapter 1 thinking map in basic stage](/img/54/f187e22ad69f3985d30376bad1fa03.png)
[self use of advanced mathematics in postgraduate entrance examination] advanced mathematics Chapter 1 thinking map in basic stage

解决麒麟V10上传文件乱码问题
随机推荐
高阶-二叉搜索树详解
Flink practice -- multi stream merge
SystemVerilog learning-06-class encapsulation
JMM details
Pychart configuring jupyter
idea 好用插件汇总!!!
讓田頭村變甜頭村的特色農產品是仙景芋還是白菜
make: g++:命令未找到
Recueillir des trésors dans le palais souterrain (recherche de mémoire profonde)
【ManageEngine卓豪 】助力世界顶尖音乐学院--茱莉亚学院,提升终端安全
Geoffrey Hinton: my 50 years of in-depth study and Research on mental skills
让厦门灌口镇田头村变甜头村的特色农产品之一是蚂蚁新村
JDBC database operation
子类调用父类的同名方法和属性
Skywalking integrated Nacos dynamic configuration
JMM详解
MySQL中 in 和 exists 的区别
Factorial divisor (unique decomposition theorem)
ManageEngine卓豪助您符合ISO 20000标准(四)
IT服务管理(ITSM)在高等教育领域的应用