C语言课程设计报告数组版.doc
优质文本文华学院信息与科学技术学部课程设计报告201 6 201 7 学年第 一 学期课程名称 C语言课程设计 设计题目 ?学生成绩管理? 学生姓名 周全 学 号 150106000484 专业班级 自动化1502班 指导教师 叶念渝 2016 年 12 月6日 目录一、设计任务书21.1、题目与要求21.2、本程序涉及的知识点2二、功能设计22.1、设计思路22.2、算法设计2主函数。21管理员菜单32学生菜单43网页转跳54翻开文件65登陆程序66输入函数77排序函数88冒泡排序99搜索程序1010对分搜索11三、程序代码设计11四、运行结果展示。24五、在设计过程中遇到的困难28六、C程序设计总结29参考文献29一、 设计任务书1.1、题目与要求1,由键盘输入20个学生姓名的某门课程的学习成绩1099分也可超过。2,将分数由低到高排序用直接排序法和冒泡法,并显示学生姓名和对应的分数。3,用线性搜索法检索某个学生的成绩输入姓名,显示成绩4 , 对分搜索法检索某个学生的成绩输入姓名,显示成绩1.2、本程序涉及的知识点变量的定义、输入和输出函数、if语句、转意字符的使用、调用外部文件、调用Windows下的命令符、清屏语句等等。二、 功能设计2.1、设计思路首先,应该要完成预期的功能,在写功能时又为了检查的方便以及屡次的调用,所以每一个功能我选择了将每一个功能以一个子函数的形式写出来。而要实现某个功能就要用switch语句对某个功能进行调用。写的功能有成绩姓名的录入、直接排序、冒泡排序、线性搜索、对分搜索等。其次,就是个性化的设置,先翻开一个学校的logo,然后打印出主菜单,并且每一个功能实现后都再次出现主菜单,为了美观,每次都将上一步的操作清屏。结合实际,又将成绩的录入和学生成绩的查询分为两个系统,管理员来录入成绩,学生等用户来查询想要的结果。出于平安的考虑又设置了管理员和用户的账号密码,如果连续输错3次密码就将会强制性关机。个性化子函数有调取logo、主界面、系统调转、密码设置等。2.2、算法设计1、本程序实现的功能要求:将各个功能写成子函数,需要时进行调用。主函数。2.3、局部模块流程图1管理员菜单2学生菜单3网页转跳4翻开文件5登陆程序6输入函数7排序函数8冒泡排序9搜索程序10对分搜索三、 运行结果展示。翻开外部文件,为一个logo。账号密码显示。录入成绩。查看成绩。跳转显示。按条件查找成绩。结束。四、 在设计过程中遇到的困难问题一:输入名字会刷屏?解决方法:输入格式以及地址与不是很熟悉,全部对应就可以了。问题二:在进行交换的时候不知道字符型数组该如何交换?解决方法:调用标准函数库里的strcpy()函数问题三:主界面在每个功能执行完后都要出现?解决方法:将主界面放入一个大循环中,然后再进行功能的调用。问题四:当在对应位置与设置输入格式不一致,出现刷屏问题?解决方法:原因是格式不对,一直不能输入,但是数据流还存在于缓存中,所以用fflushstdin对缓存数据进行清空,即可防止刷屏。问题五:线性搜索时如果没有该成绩该如何提示?解决方法:设置一个标志位进行计数,如果该位不相等那么标志位加一,如果最后等于数组的位数,那么就没有查找到需要的成绩。问题六:对分搜索时程序发生崩溃?解决方法:运用调试找出逻辑错误。问题七:对分搜索时不能输出多个人的成绩?解决方法:将查找范围不断缩小,直到查找范围的最低位和最高位相等时结束。将这个范围内的全部输出。五、 C程序设计总结通过此次课程设计,使我更加扎实的掌握了C语言的根底知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验缺乏。实践出真知,通过亲自动手编程,暴露出我们尚且存在的问题,并通过多种途径去解决它。我认为,在这学期的课设中,不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。更重要的是,在实验课上,我们学会编程中重要的调试。回忆起此课程设计,至今我仍感慨颇多,从理论到实践,在这段日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅可以稳固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。例如:外部文件的调用,Windows命令符的使用等。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,但可喜的是最终都得到了解决。此次设计也让我明白了思路即出路,有什么不懂不明白的地方要及时请教或上网查询,只要认真钻研,动脑思考,动手实践,就没有弄不懂的知识,收获颇丰。六、 程序代码设计#include<stdio.h>#include<string.h>#include<windows.h>#define max1 100/最多人数char namemax120;int chengjimax1;int paimingmax1;void glcaidan();/管理员菜单void xscaidan();/学生菜单void shuru();/输入函数void paixushuchu();void denglu();/管理员登陆void paiming1();/对学生进行排名void sousuo();void zhuantiao();/网页转跳void swap();/从大到小的排序void wenjian();/翻开文件void duifen();/对分搜索void zhijie(); /直接排序/*主函数*/void main()glcaidan();/管理员菜单zhuantiao();/网页转跳xscaidan();/学生菜单/*/void wenjian() /翻开文件FILE *fp;char ch;char * = ".字符图案wenhua.txt"system("cls");if(fp=fopen(,"r")=NULL) printf("nSorry, Can't open the file! _n"); exit(0);else while(ch=fgetc(fp)!=EOF) printf("%c",ch); fclose(fp); Sleep(2000);system("cls");void zhuantiao()/网页转跳int i;for(i=3;i<4&&i>0;i-)system("cls");printf("nnnnnnnnnttttttttt%ds后将转跳到学生成绩查询系统.",i);Sleep(1000);void swap()/冒泡排序,从大到小的排序int flag;int i,j;char a20;int b;for(i=0;i<max1-1;i+)flag=0;for(j=0;j<max1-i-1;j+) if(chengjij<chengjij+1)flag=1;strcpy(a,namej+1);b=chengjij+1;strcpy(namej+1,namej);chengjij+1=chengjij;strcpy(namej,a);chengjij=b; if(flag=0)break;paiming1();void zhijie()/直接排序int i,j;char a20;int b;for(i=0;i<max1;i+)for(j=i+1;j<max1;j+)if(chengjii <chengjij )strcpy(a,namei);b=chengjii ;strcpy(namei,namej);chengjii =chengjij ;strcpy(namej,a);chengjij =b;void paiming1()/对学生进行排名int a,j;for(a=1,j=0;j<max1;j+)paimingj=a; a+;void glcaidan()/管理员菜单int a,b,c,d,f;char e;a=1;c=0;d=0;f=0;wenjian();/翻开文件while(a)b=1;Sleep(f);system("cls");while(b)printf("*n");printf("* 欢送来到学生成绩录入系统 *n");printf("*n");printf(" %c1、登陆 %c2、录入学生成绩 %c3、查看录入成绩 % c4、退出登陆n",3,3,3,3);fflush(stdin);scanf("%d",&e);switch(e)case 1:denglu();/管理员登陆b=0;c=1;f=2000;break;case 2:if(c=1)shuru();/成绩输入b=0;d=1;f=2000;elseprintf("nnnttttttttt您还没有登陆,请先登录n");b=0;f=2000;break;case 3:if(c=1)if(d=1)paiming1();/对学生进行排名paixushuchu();b=0;f=10000;elseprintf("nnnttttttttt还没有录入成绩。n");b=0; f=2000;elseprintf("nnnttttttttt您还没有登陆,请先登录n");b=0;f=2000;break;case 4:if(c=1)printf("nnnttttttttt成功退出登陆。n");a=0;b=0;elseprintf("nnnttttttttt您还没有登陆。请登录n");b=0;f=2000;break;default:printf("nnnttttttttt未知错误n");fflush(stdin);b=0;f=2000;void xscaidan()/学生菜单int a,b,c,d,e,f;a=1;c=0;d=0;f=0;wenjian();/翻开文件while(a)b=1;Sleep(f);system("cls");while(b)printf("*n");printf("* 欢送来到学生成绩查询系统 *n");printf("*n");printf(" %c1、登陆 %c2、查看学生成绩 %c3、按条件查找 % c4、退出登陆n",3,3,3,3);fflush(stdin);scanf("%d",&e);switch(e)case 1:denglu();/学生登录b=0;c=1;f=2000;break;case 2:if(c=1)paixushuchu();b=0;f=10000;elseprintf("nnnttttttttt您还没有登陆,请先登录n");b=0;f=2000;break;case 3:if(c=1)sousuo();b=0;f=5000;elseprintf("nnnttttttttt您还没有登陆,请先登录n");b=0;f=2000;break;case 4:if(c=1)printf("nnnttttttttt成功退出登陆。n");a=0;f=2000;elseprintf("nnnttttttttt您还没有登陆。请登录n");b=0;f=2000;break;default:printf("nnnttttttttt未知错误n");fflush(stdin);b=0;f=2000;void denglu()/登陆int a=1,b=0;char zh7="123456"char mima4="123"char zh17,mima14;printf("请输入管理员账号:");while(a)fflush(stdin);scanf("%s",&zh1);if(strcmp(zh,zh1)!=0)printf("nnnttttttttt账号错误,请重新输入!nttttttttt");elsea=0;a=1;printf("请输入密码:");while(a)fflush(stdin);scanf("%s",&mima1);if(strcmp(mima,mima1)!=0)b+;printf("nnnttttttttt密码错误,请重新输入!nttttttttt");printf("nttttttttt已输错%d次,还有%d次时机.nttttttttt",b,3-b);elsea=0;if(b=3)printf("您已连续三次输错密码,即将关机。");system("shutdown -s -t 10");/调用Windows命令符关机Sleep(9000);system("shutdown -a");/为调试方便取消关机printf("nnnttttttttt登陆成功。n");void shuru()/输入函数int f,g;int j=0;f=1;memset(&name, 0, sizeof(name);/将数组进行清空memset(&chengji, 0, sizeof(chengji);/将数组进行清空printf("nn请输入学生的姓名和成绩(以“.结束)n");while(f)printf("请输入第%d个同学的名字:",j+1);fflush(stdin);scanf("%s",namej );if(namej0 !='.')g=1;while(g)printf("请输入第%d个同学的成绩:",j+1);fflush(stdin);scanf("%d",&chengjij );if(chengjij<0|chengjij>100)printf("n输入错误,请重新输入!n");elseg=0;else f=0;j+;void paixushuchu()/排序输出int a,b,c,d;c=1;printf("按照冒泡排序请按1,直接排序请按2.n");while(c)scanf("%d",&d);switch(d)case 1:swap();c=0; break;case 2:zhijie();c=0;break;default:printf("输入有误。请重新输入。n");for(a=0,b=0;a<max1;a+)if(namea0!='.' && chengjia!=0)if(c=0)printf("nn下面输出学生的排名:n");/输出排序结果printf("排名t名字t成绩n");c+;printf("%dt%st%dn",paiminga,namea,chengjia);elseb+;if(b=max1)printf("nnnnttttttttt没有查到该次考试成绩。");void sousuo()/搜索成绩int a,b,d,e,j;char mingzi20;printf("nn开始查找成绩!n");printf("n按姓名查找请按1,按成绩查找请按2. n");fflush(stdin);scanf("%d",&b);switch(b)case 1:printf("请输入姓名:n");fflush(stdin);scanf("%s",&mingzi);for(j=0,d=0;j<max1;j+)if(strcmp(mingzi,namej)=0)printf("姓名:%sn排名:%dn成绩:%dnn",namej,paimingj,chengjij);elsed+;if(d=max1) printf("没有查找到此人n");break;case 2:printf("n线性搜索请按1,对分搜索请按2n");fflush(stdin);scanf("%d",&a);switch(a)case 1:printf("n请输入成绩:n");fflush(stdin);scanf("%d",&e);for(j=0,d=0;j<max1;j+)if(e=chengjij)printf("姓名:%sn名次:%dn成绩:%dnn",namej,paimingj,chengjij);elsed+;if(d=max1) printf("没有查找到此成绩n");break;case 2:duifen();break;default:printf("输入错误n");void duifen()/对分搜索int a,b,c,d,i;int m=0,n=max1-1;fflush(stdin);scanf("%d",&b);a=1;d=1;while(a)c=(m+n)/2;if(b=chengjic )while(d)if(chengjim=chengjin)for(i=m;i<=n;i+)printf("姓名:%sn名次:%dn成绩:%dnn",namei,paimingi,chengjii);d=0;a=0; elseif(b<chengjim)m=m+1;if(b>chengjin)n=n-1;if(m>n)printf("没有查找到此成绩n");d=0;a=0;elseif(b<chengjic)m=c+1;if(b>chengjic)n=c-1;参考文献1 C Primer Plus: 第五版/美普拉塔 著;云巅工作室译。2