安徽工业大学计算机学院程序设计综合实习报告题目:用C语言制作学生选课系统姓名:学号:学院:计算机学院班级:指导老师:完成日期:2012年5月1日课程设计任务书标题用C语言制作一个学生选课系统课程设计内容介绍:用学过的知识和查找相关知识编译学生选课系统这个程序,方便学生选课,快速获得选课信息和选课情况等等设计者姓名:指导老师意见:指导老师签名:目录一、可行性研究报告1.项目由来2.可选方案3.可行性4.结论二、需求规格说明1.目标2.空能需求3.数据需求三、总体设计1.软件结构(软件结构图)四、详细设计1.各模板算法、流程图五、程序源代码六、程序测试1.测试内容和结果表+运行效果抓图2.测试分析七、总结1.项目评价2.不足之处一、可行性研究报告项目由来:学生选课如果是书面选的话,由于人数多的问题会非常复杂,所以编译一个选课系统会方便学生选课,快速获得学生选课信息和选课情况。可行方案:在实现过程中,应用到了各种函数和语句来编写,在c++环境下编译成功。可行性:本程序只利用了简单的语法和算法,利用C语言编译工具就能编译成功。结论:本系统可以马上开始实施,并尽可能的用最简单的方法得到。所以在实施过程中将利用最简单的方法得对最满意的结果。二、需求规格说明1.目标本文主要描述学生选课系统应用程序的软件要求,目的是为了清晰地描述用户使用本软件必须要完成的任务和定义开发人员实现的软件功能,使用户利用程序能够完成他们的任务。3.功能需求实现过程中,应用到了各种函数和语句来编写4.数据需求在数据结构方面,我们尽量使用简单的数据结构,但同样能得到满意的结果,这样能够使程序执行更稳定、高效。三、总体设计四、程序源代码#includestdio.h#includestdlib.hintN1,N2,kk1,kk2,kk3;structcouse*head1;structstudent*head2;structcouse//课程信息结构体{intnum1;charname1[20];intscore;学生选课系统主菜单1.录用课程信息2.课程管理3.录用学生信息4.学生信息管理5.学生选课6.系统信息查看及存储7.退出系统1.新增课程2.删除课程3.返回主菜单1.查询可选课程2.查询已选课程3.返回主菜单1.查看课程信息2.查看学生信息3.存储信息4.返回主菜单感谢使用本系统!再见!1.从键盘输入2.从文件录用3.返回主菜单1.新增课程2.删除课程3.返回主菜单1.从键盘输入2.从文件录用3.返回主菜单intnelepeo;//课程已选人数intMelepeo;//课程人数上限structcouse*next;};structstudent//学生信息结构体{intnum2;charname2[20];intnelenum[50];//已选课程编号intnelen;//已选课程数量structstudent*next;};voidMs(){for(kk1=0;kk11100;kk1++)for(kk2=0;kk21200;kk2++)for(kk3=0;kk31200;kk3++);}voidkeyboardc()//录入课程子函数(从键盘录入){structcouse*p1,*p2;N1=0;p1=p2=(structcouse*)malloc(sizeof(structcouse));printf(课程编号\t课程名称\t学分\t课程人数上限\n);scanf(%d%s%d%d,&p1-num1,p1-name1,&p1-score,&p1-Melepeo);p1-nelepeo=0;head1=NULL;while(p1-num1!=0){N1=N1+1;if(N1==1)head1=p1;elsep2-next=p1;p2=p1;p1=(structcouse*)malloc(sizeof(structcouse));scanf(%d%s%d%d,&p1-num1,p1-name1,&p1-score,&p1-Melepeo);p1-nelepeo=0;}p2-next=NULL;}voidfilec()//录入键盘子函数(从文件录入){FILE*fp;charfilepath[20];structcouse*p1,*p2;N1=0;printf(输入要读入的文件路径:);getchar();gets(filepath);if((fp=fopen(filepath,r))==NULL){printf(找不到%s文件!\n,filepath);exit(0);}p1=p2=(structcouse*)malloc(sizeof(structcouse));fscanf(fp,%d%s%d%d%d,&p1-num1,p1-name1,&p1-score,&p1-nelepeo,&p1-Melepeo);head1=NULL;while(!feof(fp)){N1=N1+1;if(N1==1)head1=p1;elsep2-next=p1;p2=p1;p1=(structcouse*)malloc(sizeof(structcouse));fscanf(fp,%d%s%d%d%d,&p1-num1,p1-name1,&p1-score,&p1-nelepeo,&p1-Melepeo);}p2-next=NULL;}voidinputc()//录入课程主函数{inti;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):keyboardc();break;case(2):filec();break;case(3):break;}}voidinsertc(structcouse*incouse)//课程管理子函数(增加课程){structcouse*p0,*p1,*p2;p1=head1;p0=incouse;if(head1==NULL){head1=p0;p0-next=NULL;}else{while((p0-num1p1-num1)&&(p1-next!=NULL)){p2=p1;p1=p1-next;}if(p0-num1=p1-num1){if(head1==p1)head1=p0;elsep2-next=p0;p0-next=p1;}else{p1-next=p0;p0-next=NULL;}}N1=N1+1;}voiddelc(intnum1)//课程管理子函数(删除课程){structcouse*p1,*p2;if(head1==NULL){printf(\n没有课程,无法删除!\n);gotoend;}p1=head1;while(num1!=p1-num1&&p1-next!=NULL){p2=p1;p1=p1-next;}if(num1==p1-num1){if(p1==head1)head1=p1-next;elsep2-next=p1-next;printf(已删除该编号课程!\n);N1=N1-1;}elseprintf(无该编号的课程!\n);end:;}voidmanagementc()//课程管理主函数{structcouse*incouse;inti,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):{incouse=(structcouse*)malloc(sizeof(structcouse));printf(课程编号\t课程名称\t学分\t课程人数上限\n);scanf(%d%s%d%d,&incouse-num1,incouse-name1,&incouse-score,&incouse-Melepeo);incouse-nelepeo=0;insertc(incouse);break;}case(2):{printf(请输入要删除课程的编号:\n);scanf(%d,&num1);delc(num1);break;}case(3):break;}}voidkeyboards()//录入学生信息子函数(从键盘录入){inti;structstudent*p1,*p2;N2=0;p1=p2=(structstudent*)malloc(sizeof(structstudent));printf(学生学号\t学生姓名\n);scanf(%d%s,&p1-num2,p1-name2);p1-nelen=0;for(i=0;i20;i++)p1-nelenum[i]=0;head2=NULL;while(p1-num2!=0){N2=N2+1;if(N2==1)head2=p1;elsep2-next=p1;p2=p1;p1=(structstudent*)malloc(sizeof(structstudent));scanf(%d%s,&p1-num2,p1-name2);p1-nelen=0;for(i=0;i20;i++)p1-nelenum[i]=0;}p2-next=NULL;}voidfiles()//录入学生信息子函数(从文件录入){inti=0;FILE*fp;charfilepath[20];structstudent*p1,*p2;N2=0;printf(输入要读入的文件路径:);getchar();gets(filepath);if((fp=fopen(filepath,r))==NULL){printf(找不到%s文件!\n,filepath);exit(0);}p1=p2=(structstudent*)malloc(sizeof(structstudent));fread(p1,sizeof(structstudent),1,fp);head2=NULL;while(!feof(fp)){i=0;N2=N2+1;if(N2==1)head2=p1;elsep2-next=p1;p2=p1;p1=(structstudent*)malloc(sizeof(structstudent));fread(p1,sizeof(structstudent),1,fp);}p2-next=NULL;}voidinputs()//录入学生信息主函数{inti;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):keyboards();break;case(2):files();break;case(3):break;}}voidinserts(structstudent*incouse)//学生信息管理子函数(填加学生信息){structstudent*p0,*p1,*p2;p1=head2;p0=incouse;if(head2==NULL){head2=p0;p0-next=NULL;}else{while((p0-num2p1-num2)&&(p1-next!=NULL)){p2=p1;p1=p1-next;}if(p0-num2=p1-num2){if(head2==p1)head2=p0;elsep2-next=p0;p0-next=p1;}else{p1-next=p0;p0-next=NULL;}}