1、综合设计题目:学籍管理及选课系统课程名称: C语言高级程序及设计学 院 :自动化 专业班级: 12电力4班学 号:姓 名:郑程鹏联系方式:任课老师:王星华2014年12月3日#includestdio.hincludeintcourcenum,studentnum;/课程的结构体structcourceintnum,credit,maxnum,selectednum;charcourceName30;structcource next;cource;/学生的结构体struct studentcharstudentname20;intselectednum,selectedcredit,num;
2、intcource10;struct student * next;student;/指针链表的头structcource * courcehead;struct student studenthead;int j;void main()voidgetcource();voidgetstudent();inti;/作为获取用户的输入的变量getcource();/从文件中读取已保存的课程数据getstudent();/从文件中读取已保存的学生数据system(”cls);run:for(j =0;j 80;j+) printf(”);printf(”nnn1。查看课程 ”);printf(”2
3、.查看管理学生 );printf(”3.查看选课 );printf(4.选课情况 );printf(”5。退出系统 nnn”);for(j =0;j 80;j+) printf(”*);printf(请输入您的选择:”);scanf(%d”,i);if(i 5) printf( 输入有误n”);goto run; if(i = 1) system(”cls”);/清屏函数,清楚屏幕所有的东西viewcource();/查看课程的函数goto run; else if(i = 2) system(”cls”); manage();/管理学生的函数goto run; else if(i = 3)
4、system(”cls);xuankecaidan();/选课的函数goto run; else if(i = 4) system(”cls”);sortstudent();/查看选课情况的函数goto run; else if(i = 5) system(”cls”); voidgetcource() FILE * fp;structcource p1,p2;courcenum=0;char filepath = ”cource。txt;/默认txt文件在当前目录下 if((fp=fopen(filepath,”r”)=NULL)/以只读的方式打开文件 /无法打开文件的时候printf(er
5、ror to find courcefile%s!n,filepath);exit(0); /生成structcource大小的内存并让p1,p2指向 p1=p2=(structcource)malloc(sizeof(structcource); /从文件中读取 fscanf(fp,”%ds%d%d%d”,p1num,p1courceName,&p1credit,p1-maxnum,p1selectednum);courcehead=NULL;while(!feof(fp))/循环读取直到读到文件结尾 courcenum=courcenum+1; /读取第一个课程的时候情况不同if(cour
6、cenum=1) courcehead=p1;else p2next=p1; p2=p1; p1=(structcource )malloc(sizeof(structcource)); fscanf(fp,”%d%sddd”,&p1-num,p1courceName,p1credit,p1maxnum,p1-selectednum); p2next=NULL;voidgetstudent()charbianhao20;char fgzf = ;”;char cba;inti;FILE fp;struct student *p1,*p2;courcenum=0;charfilepath = ”
7、student。txt”;if((fp=fopen(filepath,r)=NULL) printf(”error to find student file%s!n,filepath);exit(0); p1=p2=(struct student*)malloc(sizeof(struct student));fscanf(fp,%dsd%s%d,p1num,p1-studentname,&p1-selectednum,bianhao,p1-selectedcredit);cba=strtok(bianhao,fgzf);/char *strtok(char s, const char *de
8、lim);分解字符串为一组字符串。s为要分解的字符串,delim为分隔符字符串。i=0;while(cba) p1courcei=change(cba);cba=strtok(NULL,fgzf);i+;studenthead=NULL;while(!feof(fp) studentnum=studentnum+1;if(studentnum=1) studenthead=p1;else p2-next=p1; p2=p1; p1=(struct student )malloc(sizeof(struct student);fscanf(fp,”%d%sdsd”,&p1num,p1-stude
9、ntname,&p1selectednum,bianhao,p1-selectedcredit);cba=strtok(bianhao,fgzf);i=0;while(cba) p1courcei=change(cba);cba=strtok(NULL,fgzf);i+; p2next=NULL;int change(char str)int v=0;do v=10v+*str0;str+; while(*str=0)&(strnum,ccourceName,c-credit,cmaxnum,c-selectednum); c=c-next; fclose(fp);voidsetstudent
10、() FILE fp;struct student * s;charfilepath = ”student。txt;if(fp=fopen(filepath,”w))=NULL) printf(nnot save”);exit(0); charfgzf2=”;”;inti;s=studenthead;while(s!=NULL snum!=NULL)charoutcource15=”;for(i=0;inum,s-studentname,s-selectednum,outcource,s-selectedcredit);s=s-next;for(j =0;j 80;j+) printf(”*)
11、;voidviewcource()system(”cls”);structcource c;c=courcehead;printf(”课程序号课程名称学分最大人数已选人数n”);while(c!=NULL) printf(%16d%-16s10d16d%10dn”,c-num,ccourceName,ccredit,cmaxnum,c-selectednum);c=cnext;voidzengjia(struct student newstudent)struct student *p0,p1,p2; p1=studenthead; p0=newstudent;if(studenthead=N
12、ULL) studenthead=p0; p0next=NULL; else while((p0-num p1num) & (p1-next!=NULL) p2=p1; p1=p1next; if(p0-num = p1num)printf(”您所输入的学号重复n);goto end;if(p0num p1-num) if(studenthead=p1)studenthead=p0;else p2-next=p0; p0next=p1; else p1-next=p0; p0next=NULL; studentnum=studentnum+1;save();end: ;void manage(
13、)struct student * newstudent;inti,num;run:for(j =0;j 80;j+) printf(”*”);printf(”1。添加新学生n);printf(2.查看已存在的学生资料n);printf(3.返回n);for(j =0;j 80;j+) printf(”*”);scanf(”%d”,i);if(i = 1) system(cls”);newstudent=(struct student *)malloc(sizeof(struct student));newstudent-selectednum=0;newstudent-cource0=0;p
14、rintf(”学号姓名 n”);scanf(d s”,&newstudentnum,newstudent-studentname);newstudentselectedcredit=0;zengjia(newstudent);system(”cls”);goto run; else if(i = 2) viewstudent();goto run; else if(i = 3) system(cls”); voidxuanke(struct student s)structcource c;intnum,i,j=0;run:for(j =0;j next;if(cnum!=num)printf
15、(输入有误n);goto run;if(cmaxnum=c-selectednum)printf(该课程人数已爆满n);goto run;for(i=0;scourcei0;i+)if(num=scourcei)printf(不能重复选课n”);goto run; if(s-selectednum=5)printf(所选课程数已达5门n);goto end;s-courcei=num;/刷新数据 (sselectednum)+;s-selectedcredit+=c-credit;(cselectednum)+;save();printf(”选课成功n”);end:;voidtuixuan(s
16、truct student s)structcource * c;intnum,i,j=0;run:printf(课程序号(返回请按9回车):n”);scanf(d”,num);if(num=9)goto end; c=courcehead;while(cnum!=num cnext!=NULL) c=c-next;if(c-num!=num)printf(”输入有误n”);goto run;for(i=0;scourcei!=num;i+)if(i=s-selectednum)printf(”您还没选此课程n”);goto run;for(j=i;s-courcej0;j+)scourcej
17、=s-courcej+1;scourcej=0;s-selectednum;sselectedcredit=ccredit;(cselectednum)-;save();printf(已退选该课程n”);end:;voidchaxunkexuan()char e;structcource c;struct student s;for(j =0;j 80;j+) printf(”);intnum,j=0;system(cls);printf(”请输入学号:n”);scanf(”%d”,&num);system(”cls); s=studenthead;while(s-num!=num s-nex
18、t!=NULL) s=s-next;if(s-num!=num) printf(”没有此人!n”);goto end; system(”cls); c=courcehead;for(j =0;j 80;j+) printf();printf(”可选课程:n”);printf(”序号课程学分人数上限已选人数n”);while(c!=NULL) if(c-maxnum!=cselectednum) printf(%-16d%-16s%10d-16d10dn”,cnum,c-courceName,ccredit,cmaxnum,cselectednum);j+; c=cnext; if(j=0) p
19、rintf(”课程已被选完n”);goto end; for(j =0;j 80;j+) printf(*”);printf(”n是否选课y/n?:n”);getchar(); e=getchar();while(e=y) xuanke(s);printf(”n继续选课y/n?:n”);getchar(); e=getchar(); system(”cls”);end:;voidchaxunyixuan()char e;struct student * s;intnum,i;system(cls);printf(请输入学号:n”);scanf(%d,num); s=studenthead;wh
20、ile(snum!=num & snext!=NULL) s=snext;if(snum!=num) printf(”无此人n);goto end; system(”cls”);printf(”已选课程序号:n”);if(scource=0) printf(”没选课n”);goto end; for(i=0;(s-courcei0)&(inext = NULL;while (zhijiecharu != NULL) for (t = zhijiecharu, q = head; ((q!= NULL) (qselectedcredit tselectedcredit)); p = q, q =
21、 qnext);zhijiecharu = zhijiecharu-next;if (q = head) head = t; else pnext = t; tnext = q; return head;voidsortstudent()struct student *newstudenthead,p,temp=(struct student * )malloc(sizeof(struct student));if(studenthead=NULL)printf(”尚未进行选课n”);exit(0);newstudenthead=studenthead;p = sort(newstudenth
22、ead);charfgzf2=”;”;inti;for(j =0;j 80;j+) printf(”);printf(”学生序号学生姓名已选课程数量已选序号已选总学分n”);while(p!=NULL & pnum!=NULL)charoutcource15=”;for(i=0;iselectednum,outcource,p-selectedcredit);p=pnext;voidxuankecaidan()inti;for(j =0;j 80;j+) printf(”);printf(1。可选课程n”);printf(2。已选课程n);printf(”3.返回n);for(j =0;j 80;j+) printf(”);scanf(”d,i);switch(i) case(1):chaxunkexuan();break;case(2):chaxunyixuan();break;case(3):system(cls”);break;