1、根据自己的需要,自己看着修改一下 #include #includeint N1,N2,kk1,kk2,kk3;struct couse * head1;struct student * head2;struct couse/课程信息结构体int num1;char name120;int score;int nelepeo;/课程已选人数int Melepeo;/课程人数上限struct couse * next;struct student/学生信息结构体int num2;char name220;int nelenum50;/已选课程编号int nelen;/已选课程数量struct s
2、tudent * next;void Ms()for(kk1=0;kk1num1,p1-name1,p1-nelepeo=0;head1=NULL;while(p1-num1!=0)N1=N1+1;if(N1=1)head1=p1;else p2-next=p1;p2=p1;p1=(struct couse * )malloc(sizeof(struct couse);scanf(“%d%s%d%d“,p1-nelepeo=0;p2-next=NULL;void filec()/录入键盘子函数 (从文件录入)FILE * fp;char filepath20; struct couse *p1
3、,*p2;N1=0;printf(“输入要读入的文件路径 :“);getchar();gets(filepath); if(fp=fopen(filepath,“r“)=NULL) printf(“找不到%s 文件!n“,filepath); exit(0); p1=p2=(struct couse*)malloc(sizeof(struct couse);fscanf(fp,“%d%s%d%d%d“,head1=NULL;while(!feof(fp)N1=N1+1;if(N1=1)head1=p1;else p2-next=p1;p2=p1;p1=(struct couse * )mall
4、oc(sizeof(struct couse);fscanf(fp,“%d%s%d%d%d“, p2-next=NULL;void inputc()/录入课程主函数int i;printf(“ttt 录入课程信息n“);printf(“n1.从键盘录入n“);printf(“2.从文件录入 n“);printf(“3.返回主菜单 n“);printf(“请选择(13):n“);scanf(“%d“,switch(i)case(1):keyboardc();break;case(2):filec();break;case(3):break;void insertc(struct couse *i
5、ncouse)/课程管理子函数(增加课程)struct couse *p0,*p1,*p2;p1=head1;p0=incouse;if(head1=NULL)head1=p0;p0-next=NULL;elsewhile(p0-num1 p1-num1) p1=p1-next;if(p0-num1 num1)if(head1=p1) head1=p0;else p2-next=p0;p0-next=p1;elsep1-next=p0;p0-next=NULL;N1=N1+1;void delc(int num1)/课程管理子函数(删除课程)struct couse *p1,*p2;if(he
6、ad1=NULL)printf(“n 没有课程 ,无法删除!n“);goto end;p1=head1;while(num1!=p1-num1 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 couse * incouse;int i,num1;printf(“ttt 课程管理n“);printf(“1.新增课
7、程n“);printf(“2.删除课程n“);printf(“3.返回主菜单 n“);printf(“请选择(13):n“);scanf(“%d“,switch(i)case(1):incouse=(struct couse *)malloc(sizeof(struct couse);printf(“课程编号 t 课程名称t 学分t 课程人数上限n“);scanf(“%d%s%d%d“,incouse-nelepeo=0;insertc(incouse);break;case(2):printf(“请输入要删除课程的编号 :n“);scanf(“%d“,delc(num1);break;cas
8、e(3):break;void keyboards()/录入学生信息子函数(从键盘录入)int i;struct student *p1,*p2;N2=0;p1=p2=(struct student *)malloc(sizeof(struct student);printf(“学生学号t 学生姓名 n“);scanf(“%d%s“,p1-nelen=0;for(i=0;inelenumi=0;head2=NULL;while(p1-num2!=0)N2=N2+1;if(N2=1)head2=p1;else p2-next=p1;p2=p1;p1=(struct student * )mall
9、oc(sizeof(struct student);scanf(“%d%s“,p1-nelen=0;for(i=0;inelenumi=0;p2-next=NULL;void files()/录入学生信息子函数(从文件录入)int i=0;FILE * fp;char filepath20; struct student *p1,*p2;N2=0;printf(“输入要读入的文件路径 :“);getchar();gets(filepath); if(fp=fopen(filepath,“r“)=NULL) printf(“找不到%s 文件!n“,filepath); exit(0); p1=p
10、2=(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 inputs()/录入学生信息主函数int i;pri
11、ntf(“ttt 录入学生信息n“);printf(“n1.从键盘录入n“);printf(“2.从文件录入 n“);printf(“3.返回主菜单 n“);printf(“请选择(13):n“);scanf(“%d“,switch(i)case(1):keyboards();break;case(2):files();break;case(3):break;void inserts(struct student * incouse)/学生信息管理子函数(填加学生信息)struct student *p0,*p1,*p2;p1=head2;p0=incouse;if(head2=NULL)he
12、ad2=p0;p0-next=NULL;elsewhile(p0-num2 p1-num2) p1=p1-next;if(p0-num2 num2)if(head2=p1) head2=p0;else p2-next=p0;p0-next=p1;elsep1-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 p
13、1=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 * incouse;int i,num2;printf(“ttt 学生信息管理n“);printf(“1.新增学生信息 n“);printf(“2.删除学生信息 n“);printf(“3.返回主菜单 n“);printf(“请选择(13):n“
14、);scanf(“%d“,switch(i)case(1):incouse=(struct student *)malloc(sizeof(struct student);incouse-nelen=0;incouse-nelenum0=0;printf(“学生学号 t 学生姓名n“);scanf(“%d%s“,inserts(incouse);break;case(2):printf(“请输入要删除学生的学号 :n“);scanf(“%d“,dels(num2);break;case(3):break;void elect(struct student * s)/选课struct couse
15、 * p;int num1,i;printf(“请输入要选课的编号 :n“);scanf(“%d“,for(i=0;s-nelenumi!=0;i+);s-nelenumi=num1;(s-nelen)+;p=head1;while(p-num1!=num1) p=p-next;(p-nelepeo)+;void cheak()/学生选课子函数(查询可选课程)char e;struct couse * c;struct student * s;int num2,i,j=0,t=0;printf(“请输入你的学号 :“);scanf(“%d“,s=head2;while(s-num2!=num2
16、 if(s-num2!=num2)printf(“不存在你的信息 ,请进入主菜单录入你的信息!n“);goto end;c=head1;printf(“你的可选课程编号 :n“);while(c!=NULL)for(t=0,i=0;s-nelenumi!=0;i+)if(c-num1=s-nelenumi) t=1;if(t=0 j+;c=c-next;if(j=0) printf(“你已选完所有课程,无法再多选 !n“);goto end;printf(“选课(y/n)?:n“);getchar();e=getchar();i=0;while(e=y)elect(s);printf(“继续选
17、课 (y/n)?:n“);getchar();e=getchar();end:;void back(struct student * p)/退课struct couse * p1;int num1,i,j;printf(“请输入你要退掉的课程编号 :n“);scanf(“%d“,p1=head1;while(p1-num1!=num1) p1=p1-next;for(i=0;p-nelenumi!=num1;i+);for(j=i;p-nelenumj!=0;j+) p-nelenumj=p-nelenumj+1;p-nelenum-j=0;(p1-nelepeo)-;printf(“退课成功
18、!n“);void hcheak()/学生选课子函数(查询已选课程)char c;struct couse * p0;struct student * p;int num2,i,f=0;printf(“请输入学号:n“);scanf(“%d“,p=head2;while(p-num2!=num2 if(p=NULL)printf(“不存在你的信息 ,请回主菜单录入信息:n“);goto end;printf(“已选课程编号 :n“);if(p-nelenum0=0)printf(“你还没选课 !n“);goto end;for(i=0;p-nelenumi!=0;i+) printf(“%dn
19、“,p-nelenumi);p0=head1;while(p0-num1!=p-nelenumi) p0=p0-next;f=f+p0-score;printf(“总学分:%dn“,f);printf(“是否进行退课 (y/n)?“);getchar();c=getchar();while(c=y)back(p);printf(“继续退课 (y/n)?“);getchar();c=getchar();(p-nelen)-;end:;void elective()/学生选课主函数int i;printf(“ttt 学生选课n“);printf(“1.查询可选课程 n“);printf(“2.查询
20、已选课程 n“);printf(“3.返回主菜单 n“);printf(“请输入(13):n“);scanf(“%d“,switch(i)case(1):cheak();break;case(2):hcheak();break;case(3):break;void listc()/输出课程信息struct couse * p;p=head1;printf(“课程编号 课程名称 学分 课程已选人数 课程人数上限n“);while(p!=NULL)printf(“%-8d%10s%6d%8d%12dn“,p-num1,p-name1,p-score,p-nelepeo,p-Melepeo);p=p
21、-next;void lists()/输出学生信息struct student * p;p=head2;printf(“学生学号 学生姓名 已选课程数量n“);while(p!=NULL)printf(“%-4d %10s %6dn“,p-num2,p-name2,p-nelen);p=p-next;void intoc()/存储课程信息FILE * fp;struct couse * p;char filepath30; printf(“输入课程信息要保存的文件路径 :“);getchar(); gets(filepath); if(fp=fopen(filepath,“w“)=NULL)
22、printf(“n 保存失败 !“); exit(0); p=head1;while(p!=NULL)fprintf(fp,“%d %s %d %d %dn“,p-num1,p-name1,p-score,p-nelepeo,p-Melepeo);p=p-next;fclose(fp); printf(“课程信息已保存在 %s 中!n“,filepath); void intos()/存储学生信息FILE * fp;struct student * p;char filepath30; printf(“输入学生信息要保存的文件路径 :“);getchar(); gets(filepath);
23、if(fp=fopen(filepath,“w“)=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(“1.存储课程信息 n“);printf(“2.存储学生信息 n“);printf(“3.返回主菜单 n“);printf(“请输入(13)n“);scanf(“%d“,switch(i
24、)case(1):intoc();break;case(2):intos();break;case(3):break; void store()/信息主函数int i;printf(“tt 系统信息查看及存储 n“);printf(“1.查看课程信息 n“);printf(“2.查看学生信息 n“);printf(“3.存储信息n“);printf(“4.返回主菜单 n“);printf(“请输入(14):n“);scanf(“%d“,switch(i)case(1):listc();break;case(2):lists();break;case(3):into();break;case(4
25、):break;int main()/主函数int i;start:printf(“nttt 欢迎使用学生选课系统!n“);printf(“菜单:n“);printf(“1.录入课程信息 n“);printf(“2.课程管理n“);printf(“3.录入学生信息 n“);printf(“4.学生信息管理 n“);printf(“5.学生选课n“);printf(“6.系统信息查看及存储 n“);printf(“7.退出系统n“);printf(“n 请输入菜单选项 (17):n“);scanf(“%d“,if(i7)printf(“输入错误 ,请重输:n“);goto start;switc
26、h(i)case(1):system(“cls“);inputc();goto start;break;case(2):system(“cls“);managementc();goto start;break;case(3):system(“cls“);inputs();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“);printf(“感谢使用本系统 !nn 再见!n“);return(0);