C语言课程设计__学生选课系统实习报告.doc
优质文本C语言上机实习报告院 系: 班 级: 姓 名: 指 导 老 师: 2010-8-28至2010-9-4目录一、设计目的1二、设计要求2三、题目及其要求2四、需求分析2五、总体设计3六、详细设计36.1、主函数36.2、菜单函数46.3各模块设计76.3.1输入函数76.3.2添加函数96.3.3修改函数126.3.4查找函数166.3.5选择课程206.3.6删除课程236.3.7浏览函数266.3.8退出操作276.3.9公共函数保存函数28七、上机实习.28八、设计实习心得.29九、参考书目.29十、学生选课系统与程序.30一、 设计目的随着信息技术对人类社会进行的全方位渗透,一种新的文化形态信息时代的计算机文化已经形成。计算机知识成为当代知识分子结构中不可缺少的重要局部。C语言是近年来国内外得到迅速推广使用的一种高级语言。C语言功能丰富,表达能力强,使用灵活方便,应用广,目标程序效率高,可移植性好,既具有高级语言的优点,又具有低级语言的语言特点,因此C语言对我们来说很重要。学习的目的在于将所学到的东西运用于实践,这样方可在实践中稳固以前所学的理论知识,同时提高自己学习的能力,完善自己掌握的技能,使得我们既能够从实践中强化以前所学的知识,也能让我们在实践中学到更多新的东西,还能锻炼我们的动手能力,这是书本上不能学到的。此次设计就在于让我们把以往所学运用于实践中,让我们通过对实际生活中的实例进行观察和理论分析后,总结出一套可行的解决方案,然后用编程的方法,把解决方案变为可能。此次设计,也让我们稳固和加深了对C语言课程的根本知识的理解和掌握,帮助我们掌握C语言编程和程序调试的根本技能,让我们体验了如何用C语言进行根本的软件设计,同时也提高了我们书写程序说明的能力和用C语言解决实际问题的能力。二、设计要求1.认真分析实习指导老师分配的课程设计题目的要求;2.写出详细设计说明,分块论述;3.编写程序代码,调试程序使其能正确运行,并且可以实现预期的功能;4.设计完成的软件要便于操作和使用,有整齐、美观的使用界面;5.设计完成后提交课程设计报告和源代码文件的电子文档。三、题目及其要求假定有n门课程,每门课程有课程编号,课程名称,课程性质,学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求如总学分不得少于15自由选课。试设计一个选修课程系统,使之能提供以下功能: 1系统以菜单方式工作 2课程信息和学生选课信息录入功能课程信息用文件保存 3课程信息浏览功能 4查询功能 5按学分查询6某门课程学生选修情况可选项 四、需求分析 根据题目要求,由于课程和学生所选课程的信息是存放在文件中的,所以要提供文件的输入输出等操作;在程序过程中还要进行添加课程、浏览课程、查找课程、选择课程、删除课程以及退出系统等操作,所以应提供相应的输入、现实、查找、选择、删除和退出等功能的函数来实现;另外还要在最开始设置菜单函数,实现其它功能的选择。五、总体设计根据以上的题目要求以及需求分析,我认为可将我要设计的程序分为十一个模块:主函数、菜单函数、输入课程、添加课程、修改课程、查找课程、选择课程、删除课程、浏览课程、退出系统、保存文件。系统功能模块如图5-1所示主函数输入函数添加函数修改函数查找函数选择函数删除函数浏览函数菜单函数保存函数保存函数保存函数保存函数退出函数保存函数六、详细设计6.1、主函数 主函数一般设计简洁,本次设计遵循程序清晰可读,功能完善的原那么,尽量合理简化程序。在主函数中,仅提供了标准输出函数的调用和菜单函数的调用。 主函数流程图如下列图所示: 调用主函数输出“正在启动系统调用菜单函数其代码如下所示: /* 主函数 */ void main() int b=1;system("color 6f"); printf("nnnnnnnnnnt tt正在启动系统>>>> >>>> >>>>tn "); for(i=0;i<100000000;i+); system("color 2f");menu();6.2、菜单函数根据所要实现的功能,我编译了一个菜单函数,将所有选择功能集中,提供应用户进行选择。这样做既可以使程序更加紧然有序,也为用户提供了方便快捷的选择,使得整个设计更加人性化。菜单函数的流程图如下列图所示:菜单函数输入课程添加课程修改课程查找课程选择课程删除课程浏览课程 退出系统菜单函数的代码如下所示:void menu() char k100="nnnttttt052081班 王兵武nnnnnnn" char *m=k; do system("cls"); puts("ntt *管理员菜单*"); puts("ntttt1.输入课程."); puts("ntttt2.添加课程."); puts("ntttt3.修改课程."); puts("ntttt4.查找课程."); puts("ntttt5.选择课程."); puts("ntttt6.删除课程."); puts("ntttt7.浏览课程."); puts("ntttt8.退出系统.n"); puts("tt*n"); printf("ntt请输入您的选择(1-8):t"); scanf("%d",&a); printf("ntt-nn");switch(a) case 1: input(); break; case 2: add(); break; case 3: amend(); break; case 4: search(); break; case 5: select(); break; case 6: cross_off(); break; case 7: output(); break; case 8: system("cls"); for(i=0;i<10000000;i+); system("color 8f");puts("nnnnttt谢谢使用。已退出系统。"); for(m=k;m<k+1;m+)printf("%s",m);exit(0);break; default:puts("输入错误!");break; printf(" 按任意键返回首层n"); getch();while(a!=8);运行主函数和菜单函数效果如下:显示进入系统 进入主菜单: 6.3各模块设计通过主函数调用菜单函数,通过菜单函数里的开关语句选择调用各功能函数。下面详述各功能函数。6.3.1输入函数通过菜单函数调用此函数用于输入已有课程信息,并通过输入函数调用保存函数将课程信息保存在“课程.txt文件中。其流程图如下所示:调用输入函数输入课程编号判断课程是否存在参加课程已经存在,按任意键返回主菜单。课程原来不存在,继续输入课程其他信息,调用保存函数将其保存后,继续选择。假设选择返回,那么调用 菜单函数返回主菜单。选择继续,那么返回输入函数重复上述操作。其代码如下:/* 输入函数 */void input()int i,flag=0,num=0;char q;do flag = 0; printf("请输入课程编号: "); scanf("%d",&num); for(i=0;i<count;i+) if(num=KCi.num) flag = 1;break; if(flag) printf("此课程已存在!按任意键返回主菜单。n"); printf("n"); printf("请输入:"); q=getch(); menu(); else KCcount.num=num; printf("请输入课程名称: "); scanf("%s",KCcount.name);printf("请输入课程性质: "); scanf("%s",KCcount.xingzhi); printf("请输入课程学时: "); scanf("%d",&KCcount.xueshi); printf("输入实验上机学时: ");scanf("%d",&KCcount.shiyan_shangji); printf("请输入课程学分: "); scanf("%f",&KCcount.xuefen); printf("请输入开课学期: "); scanf("%d",&KCcount.xueqi); count+; baocun(); printf("输入成功!n"); while(flag=1);输入函数运行效果如下列图:1输入新课程,显示继续添加:2重复输入那么运行如下:6.3.2添加函数通过菜单函数调用添加课程函数,进行新课程的添加。输入课程编号,判断其是否已经存在,已存在那么选择重新输入或者返回主菜单,不存在那么继续添加该课程的其他信息,并调用保存函数将其信息保存在“课程.txt文件中。其流程图如下所示:调用添加函数输入课程编号判断课程是否存在所加课程已经存在,选择继续添加或返回主菜单。假设不存在,继续添加信息,调用保存函数将其保存后,继续选择。假设选择返回,那么调用菜单函返回主菜单。选择继续,那么返回添加函数重复上述操作。继续添加,那么继续调用添加函数选择返回主菜单,那么调用菜单函数。程序代码如下:/* 添加函数 */void add() int i,j,flag=0,num=0;char q;do flag = 0; printf("请输入课程编号:"); scanf("%d",&num); for(i=0;i<count;i+) if(num=KCi.num) flag = 1; break; if(flag) printf("此课程已存在!ntt请重新选择:1->重新输入;其它键->返回主菜单n"); printf("n"); printf("请输入:n"); printf("n"); q=getch(); if(q='1') add(); else menu(); else j=count; KCj.num=num; printf("请输入课程名称:"); scanf("%s",KCj.name); printf("请输入课程性质:"); scanf("%s",KCj.xingzhi); printf("请输入课程学时:"); scanf("%d",&KCj.xueshi); printf("输入实验上机学时:"); scanf("%d",&KCj.shiyan_shangji); printf("请输入课程学分:"); scanf("%f",&KCj.xuefen); printf("请输入开课学期:"); scanf("%d",&KCj.xueqi); count+; baocun(); printf("添加成功!n"); printf("请继续选择: 1->继续输入; 其它键->返回主菜单n"); q=getch(); if(q!='1')menu(); while(flag=1);其运行效果如下列图所示:1所添加课程原来不存在,那么继续添加该课程信息:2所添加课程已经存在,那么继续选择进行下一步操作:6.3.3修改函数修改函数用于对已经存在的课程信息进行相应的修改,用来修改已有课程的名称、学时、实验上机学时、学分和开课学期相关信息。调用该函数时,先输入课程编号,判断其实都存在,如果存在,那么进行相应项的修改,修改完毕保存然后选择继续修改或者返回主菜单。假设不存在,那么进行选择,选择继续修改或者返回主菜单。流程图如下所示调用修改函数输入课程编号判断课程是否存在改课程已经存在,那么继续修改该课程其他信息。修改完保存,继续选择。假设课程不存在,那么继续选择。选择继续修改,那么继续调用修改函数假设选择返回,那么调用菜单函数,返回主菜单。继续修改,那么继续调用修改函数选择返回主菜单,那么调用菜单函数。修改模块代码如下:/* 修改函数 */void amend() int num,i,flag=0;char q;doprintf("请输入要修改的课程编号:");scanf("%d",&num);for(i=0;i<count;i+) if(num=KCi.num) flag=1; if(flag=1) printf("请输入修改后的课程名称:"); scanf("%s",KCi.name); printf("请输入修改后课程性质:"); scanf("%s",KCi.xingzhi); printf("请输入修改后课程学时:"); scanf("%d",&KCi.xueshi); printf("输入修改后实验上机学时:"); scanf("%d",&KCi.shiyan_shangji); printf("请输入修改后课程学分:"); scanf("%f",&KCi.xuefen); printf("请输入修改后开课学期:"); scanf("%d",&KCi.xueqi); baocun(); printf("修改成功!请选择: 1->继续修改; 其它键->返回主菜单n"); flag=0; printf("n"); printf("请输入:"); q=getch(); if(q!='1')menu(); else amend(); else printf("无此课程!1->重新输入;任意键->返回主菜单n"); printf("n"); printf("请输入:"); printf("n"); q=getch(); if(q!='1')menu(); else amend();while(flag=0); 运行修改函数效果如下:1输入已有课程,继续修改其他信息,显示修改成功,然后继续选择:2输入课程不存在,选择继续修改或者返回主菜单:6.3.4查找函数调用查找函数,先选择按编号查找或者按学分查找,然后进行下一步。输入1,那么按编号进行查找,假设该课程存在,那么程序将该课程信息打印在屏幕上,假设不存在,那么打印不存在信息并提示继续选择查找或者返回主菜单;输入2,那么按学分进行查找,假设该课程已存在,那么程序将其信息打印与屏幕上,假设不存在那么打印不存在的信息,并提示继续选择。查找模块流程图如下调用查找函数输入2,按编号查找输入2,按学分查找输入编号存在,那么打印相关信息。提示选择继续查找或者返回。编号不存在,打印不存在的信息,提示继续查找或者返回。输入学分,存在,那么打印课程信息,然后提示继续查找或返回。输入的学分不存在,打印不存在的信息,提示重新查找或返回。输入其他键提示输入错误,按任意键返回主菜单。其代码如下所示:void search() char q;int num,i,xuefen,m,flag=0;puts("nnntt请选择: 1->按编号查询; 2->按学分查询n");scanf("%d",&m);if(m=1)do printf("请输入课程编号:"); scanf("%d",&num); for(i=0;i<count;i+) if(num=KCi.num) flag =1; break; if(flag) printf("课程编号 课程名称 课程性质 课程学时 实验上机 课程学分 开课学期n"); printf("%dt%st%st%dt%dt%1.ft%dn", KCi.num,KCi.name,KCi.xingzhi,KCi.xueshi,KCi.shiyan_shangji,KCi.xuefen,KCi.xueqi); else printf("无此课程!n请选择: 1->重新输入;其它键->返回主菜单n"); printf("n"); printf("请输入:n"); printf("n"); q=getch(); if(q!='1') menu(); while(flag=0);if(m=2)do printf("请输入课程学分:"); scanf("%d",&xuefen); for(i=0;i<count;i+) if(xuefen=KCi.xuefen) flag =1; break; if(flag) printf("课程编号 课程名称 课程性质 课程学时 实验上机 课程学分 开课学期n"); printf("%dt%st%st%dt%dt%1.ft%dn",KCi.num,KCi.name,KCi.xingzhi,KCi.xueshi,KCi.shiyan_shangji,KCi.xuefen,KCi.xueqi); else printf("无此课程!n请选择: 1->重新输入;其它键->返回主菜单n"); printf("n"); printf("请输入:n"); printf("n"); q=getch(); if(q!='1') menu(); while(flag=0);if(m!=1)&&(m!=2) printf("ntt您的输入有误。按任意键返回主菜单。t"); q=getch();menu(); 运行效果如下五幅图所示:1有主菜单项选择择“4查找课程,提示选择按编号或者学分进行查找:1按编号输入查找,输入已有课程math编号2,效果如下:2按编号查询课程,输入编号不存在,提示相关信息及作出相关选择:4按学分查询,输入已有课程学分,打印相关信息并提示选择:5输入的学分不存在,显示不存在的信息并提示选择:6.3.5选择课程在菜单函数中选择5,进入选课函数,系统会提示输入课程编号已经学生的学号。假设输入的课程编号存在,那么打印选课成功,并将所选择的课程的信息存入“选课.txt文档中,并提示选择继续选课或者返回主菜单;假设输入的课程编号不存在,那么打印岂不存在并提示进行选择继续选课或者返回主菜单。其流程图如下所示:调用选课函数输入课程编号及学生学号编号存在,选课成功及继续选课或者返回主菜单编号不存在,提示从新选择或返回主菜单。选课函数的代码如下:/* 选课课程 */void select()long num2=0,xuehao1;int i,flag=0;char q;FILE *fp_;fp_=fopen("选课.txt","w");if(fp_= NULL) printf(" error!n"); exit(0); do printf("请输入课程编号:"); scanf("%d",&num2); printf("请输入您的学号:"); scanf("%ld",&xuehao1); for(i=0;i<count;i+) if(num2=KCi.num) flag = 1;break; if(flag) fprintf(fp_,"%dt%st%st%dt%dt%1.ft%dn", KCi.num,KCi.name,KCi.xingzhi,KCi.xueshi,KCi.shiyan_shangji,KCi.xuefen,KCi.xueqi); xuankecount1.KCnum=num2; xuankecount1.xuehao=xuehao1; printf("选课成功!n");printf("您的学号为:%dn您所选课程号为:%dn",xuankecount1.xuehao,xuankecount1.KCnum); flag=1; if(fclose(fp_) printf("Can not close the file!n"); printf("nntt请选择是否继续选课:1->继续选课; 其它键->返回主菜单nn"); printf("*nn"); q=getch(); if(q='1')select(); else menu(); else printf("无此课程!请选择: 1->继续选课;其它键->返回主菜单nn"); printf("*nn"); q=getch(); if(q='1')select(); else menu(); while(flag=0);调用选课函数后效果如下两幅图所示:1输入课程编号存在时,打印选课成功,并将信息存入文档:2输入的课程编号不存在,那么打印不存在的信息,并提示做出选择:6.3.6删除课程有主菜单项选择择6,进入删除函数。执行此函数,先输入课程编号,假设编号存在,那么从文件中删除该课程,并打印删除成功,提示按任意键返回主菜单;假设编号不存在,那么打印输入课程不存在,提示重新输入或者返回主菜单。其流程图如下所示:进入删除函数输入课程编号,进行判断。编号存在,从文件中删除该课程,调用保存函数并提示按任意键返回主菜单。编号不存在,提示选择重新输入或者返回主菜单。其代码如下:void cross_off()char q;int num4=0;int i,j,flag=0;do printf("请输入要删除的课程编号:"); scanf("%d",&num4); for(i=0;i<count;i+) if(num4=KCi.num) flag = 1; break; if(flag) for(j=i;j<count-1;j+) KCj.num=KCj+1.num; strcpy(KCj.name,KCj+1.name); strcpy(KCj.xingzhi,KCj+1.xingzhi); KCj.xueshi = KCj+1.xueshi; KCj.shiyan_shangji=KCj+1.shiyan_shangji; KCj.xuefen = KCj+1.xuefen; KCj.xueqi = KCj+1.xueqi; count-; baocun(); printf("删除成功!n"); printf("按任意键返回主菜单。"); q=getch(); menu(); else printf("无此课程!1->重新输入;任意键->返回主菜单n"); printf("n"); printf("请输入:"); printf("n"); q=getch(); if(q='1')cross_off(); else menu(); while(flag=0); 其运行效果图如下所示:(1) 当输入的课程编号存在,删除成功,显示如下:(2) 当输入的课程编号不存在,系统提示重新输入或者返回主菜单:6.3.7浏览函数在主菜单项选择择7,进入浏览函数,程序将自动将课程文档中存储的课程的所有信息打印在屏幕上。此函数的功能就是输出课程文档中保存的课程信息。 程序的流程图如下所示:进入浏览函数系统打印课程信息,并提示按任意键返回主菜单。程序代码如下:void scan() int i,j,xueshi, num,xueqi=0;char *name,*xingzhi; float xuefen;for(i=1;i<count;i+) for(j=0;j<count-1;j+) if(KCj.num=KCj+1.num) num=KCi.num; strcpy(name,KCi.name); strcpy(xingzhi,KCi.xingzhi); xueshi = KCi.xueshi; KCj.shiyan_shangji= KCj-1.shiyan_shangji; xuefen = KCi.xuefen; xueqi = KCi.xueqi; KCi.num=KCi+1.num; strcpy(KCi.name,KCi+1.name); strcpy(KCi.xingzhi,KCi+1.xingzhi); KCi.xueshi = KCi+1.xueshi; KCj.shiyan_shangji= KCj-1.shiyan_shangji; KCi.xuefen = KCi+1.xuefen; KCi.xueqi = KCi+1.xueqi; KCi+1.num=num; strcpy(KCi+1.name,name); strcpy(KCi+1.xingzhi,xingzhi); KCi+1.xueshi = xueshi; KCj.shiyan_shangji= KCj-1.shiyan_sh