开通VIP,畅享免费电子书等14项超值服
首页
好书
留言交流
下载APP
联系客服
2010.06.22
#include
#defineSTU_NUM40/*最多的学生人数*/#defineCOURSE_NUM10/*最多的考试科目*/
structstudent{intnumber;/*每个学生的学号*/charname[10];/*每个学生的姓名*/intscore[COURSE_NUM];/*每个学生M门功课的成绩*/intsum;/*每个学生的总成绩*/floataverage;/*每个学生的平均成绩*/};typedefstructstudentSTU;
/*函数功能:向链表的末尾添加从键盘输入学生的学号、姓名和成绩等信息函数参数:结构体指针head,指向存储学生信息的结构体数组的首地址整型变量n,表示学生人数整型变量m,表示考试科目函数返回值:无*/voidAppendScore(STU*head,intn,intm){intj;STU*p;for(p=head;p
number);printf("Inputname:");scanf("%s",p->name);for(j=0;j/*函数功能:打印n个学生的学号、姓名和成绩等信息函数参数:结构体指针head,指向存储学生信息的结构体数组的首地址整型变量n,表示学生人数整型变量m,表示考试科目函数返回值:无*/voidPrintScore(STU*head,intn,intm){STU*p;inti;charstr[100]={'\0'},temp[3];strcat(str,"NumberName");for(i=1;i<=m;i++){strcat(str,"Score");itoa(i,temp,10);strcat(str,temp);strcat(str,"");}strcat(str,"sumaverage");printf("%s",str);/*打印表头*/for(p=head;p
number,p->name);for(i=0;i/*函数功能:计算每个学生的m门功课的总成绩和平均成绩函数参数:结构体指针head,指向存储学生信息的结构体数组的首地址整型变量n,表示学生人数整型变量m,表示考试科目函数返回值:无*/voidTotalScore(STU*head,intn,intm){STU*p;inti;for(p=head;p
sum=0;for(i=0;i/*函数功能:用选择法按总成绩由高到低排序函数参数:结构体指针head,指向存储学生信息的结构体数组的首地址整型变量n,表示学生人数函数返回值:无*/voidSortScore(STU*head,intn){inti,j,k;STUtemp;for(i=0;i
/*函数功能:查找学生的学号函数参数:结构体指针head,指向存储学生信息的结构体数组的首地址整型变量num,表示要查找的学号整型变量n,表示学生人数函数返回值:如果找到学号,则返回它在结构体数组中的位置,否则返回-1*/intSearchNum(STU*head,intnum,intn){inti;for(i=0;i
/*函数功能:按学号查找学生成绩并显示查找结果函数参数:结构体指针head,指向存储学生信息的结构体数组的首地址整型变量n,表示学生人数整型变量m,表示考试科目函数返回值:无*/voidSearchScore(STU*head,intn,intm){intnumber,findNo;printf("PleaseInputthenumberyouwanttosearch:");scanf("%d",&number);findNo=SearchNum(head,number,n);if(findNo==-1){printf("\nNotfound!\n");}else{PrintScore(head+findNo,1,m);}}
/*函数功能:显示菜单并获得用户键盘输入的选项函数参数:无函数返回值:用户输入的选项*/charMenu(void){charch;
printf("\nManagementforStudents'scores\n");printf("1.Appendrecord\n");printf("2.Listrecord\n");printf("3.Searchrecord\n");printf("4.Sortrecord\n");printf("0.Exit\n");printf("PleaseInputyourchoice:");scanf("%c",&ch);/*在%c前面加一个空格,将存于缓冲区中的回车符读入*/returnch;}
摘要
学生成绩管理系统是一个教育单位不可缺少的部分,它的内容对于学校的决策者和管理者来说都至关重要,所以学生成绩管理系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来人们使用传统人工的方式管理文件档案,这种管理方式存在着许多缺点。随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。作为计算机应用的一部分,使用计算机对学生信息及成绩进行管理,具有手工管理所无法比拟的优点.
Studentresultmanagementthesystemisthepartofeducationunitindispensability,itscontentssaysalltothepassimportanceforthedecisionmakerofschoolandthegovernor,sostudenttheresultmanagethesystemshouldbeabletoprovideampleinformationandfastsearchmeansforcustomer.Butalwayspeopleusethewaymanagementoftraditionalartificialdocumentfile,thismanagementwayexistsmuchweakness.Alongwithsciencetechniqueofcontinuouslyraise,calculatorscienceisgradualmaturity,itthestrongfunctionhavealreadyprofoundlyknownforpeople,ithasalreadygotintomankind'seachrealmofsocietytoerupttoflickamoreandmoreimportantfunction.Asapartofthecalculatorapplication,usagethecalculatorcarryonamanagementtostudent'sinformationandtheresultandhavethehandicraftmanagementcansnotcomparetoofadvantage.
一.课程设计目的
1、熟练掌握C语言课程中所学的理论知识;
C语言是在国内外广泛使用的一种计算机语言。它既有高级语言的特点,又具有汇编语言的特点。它可以作为系统设计语言,编写工作系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。因此,它的应用范围广泛。学习使用C语言程序的目的是掌握程序设计的思路,学会用计算机语言编写程序正确处理算法和语法的关系算法是程序的核心、是灵魂,语法是外壳、是工具。通过课程设计,我们要熟练的掌握C语言的算法、语言、函数的调用、循环的使用、数组的运用等。
2、通过综合C语言的基本知识来解决实际问题;
C语言中与许多的东西,像:数据类型、运算符、表达式、程序设计结构、数组与函数调用。其中C语言最难和最经典的地方就是循环,(while和for的嵌套)运用WHILE,FOR,SWITCH和if的循环嵌套,我们可以实现现实中课程信息管理、图书信息管理、学生信息管理、商品信息管理等。C语言还具有绘图能力强,可移植性,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画。它是数值计算的高级语言。
3、加强分析和解决问题的能力。
通过这次的课程设计,能加强我们对程序设计的思考、设计、分析、理解和解决问题的能力。对于我们初学者来说,主要是学习成长设计的方法,进行程序设计的基本训练为将来进一步学习打下基础。课程设计不能之掌握概念,还要动手编程、上机调试运行。只有自己动手,才能学的更多。
二.课程设计题目描述和要求
1.题目:学生成绩管理系统.在程序设计时将其逐步细化,每个模块由一个函数实现,整个程序通过函数调用联系。使用函数思想编写程序,程序中的每个模块都做成函数形式,由主函数调用子函数。在各个功能模块设计时根据其具体功能使用所学知识进行设计,例如:在需要循环输出时可以使用for循环,需要条件控制时可以使用if语句,在排序时可以使用冒泡法等。
2.要求:设计包含N个学生的数据信息的学生成绩管理系统,包括以下信息:学号—num[10](字符串)、姓名(拼音)—name[25](字符串)、性别—sex(字符,M或F)、年龄—age三门课程成绩(高数、英语、计算机)—score[3](整型)。
三、课程设计报告内容、算法分析及调试
1.设计步骤
(1)、需求分析:对系统的应实现的功能进行分析。
(2)、概要设计:对系统功能进行模块分解,对模块的功能及模块之间的相互关系进行说明(如用到函数,则对函数间的接口进行说明),对系统使用的数据结构(各数组、主要变量的设置及其代表的含义)进行说明。
(3)、详细设计:用流程图、伪代码等方法对各主要算法进行描述。
(4)、编写代码:根据设计编写。源程序要按照程序的格式规范来编写,要求结构清晰,界面友好,关键部分有必要的注释。
(5)、调试分析:准备充分的测试数据对系统进行调试(对错误的数据输入也要进行测试,保证程序的容错性),并通过测试对系统提出改进设想。
5.调试
经过我们这个小组一天的调试,我们终于把各自的模块整合起来了,在这过程中,我们遇到了很多问题,像数据不匹配,括号不配对,赋值重复等。因为C语言的语法限制不太严格,对变量的类型约束不严格,影响程序的安全性,对数组下标越界不作检查等原因。但经过我们这小组共同的努力,终于完成了。首先,我们用DOWHILE循环,使这个图书系统能无限使用,再次,我们用SWITCH对各个模块功能进行了组合,使学生成绩管理系统的功能更完善,界面更清晰、明了。
四.总结
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,当今计算机应用在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握计算机开发技术是十分重要的。
回顾起此次课程设计,至今我仍感慨颇多,的确,从从拿到题目到完成整个编程,从理论到实践,在整整一个星期的日子里,可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
六、附录的源程序及各模块说明
1、主函数
#include
#include
#include
#defineN100
intM=0;
structstudent
{charnum[10];
charname[25];
charsex;
intage;
floatscore[3];
}stu[N];
voidmain()
{voidsystem();
voidmenu();voidadd();
voiddel();
voidsearch();
voidmodify();
voidsort();
intk,i;
charstr[10];
printf("*****************************************************************************\n");
{printf("请输入六位数密码:");
for(i=0;(str[i]=getch())!='\r';i++)
putchar('*');
printf("\n");
str[i]='\0';
if(strcmp(str,"123456")!=0)
printf("密码错误!\n");
elsebreak;
}
printf("登陆成功!");
printf("\n\n\n");
system("cls");
menu();
2、菜单函数
定义菜单函数,通过输出函数显示系统功能。利用switch语句实现多分支选择结构。
voidmenu()
{intc;printf("欢迎进入主菜单!\n");
printf("****************************************************************************\n");
printf("请选择操作:");
scanf("%d",&c);
if(c<1||c>6)c=0;
switch(c)
{case0:printf("输入错误!\n");break;
case1:add();break;
case2:del();break;
case3:search();break;
case4:modify();break;
case5:sort();break;
case6:break;
}}
3、录入函数
多次使用输入输出函数输入信息,通过标记flag控制多次输入。
voidadd()
inti=0,flag=1;chark;
system("cls");printf("欢迎进入学生信息的录入!\n");
while(flag)
{i++;
printf("请输入第%d个学生的学号:",i);
scanf("%s",stu[i-1].num);
printf("请输入第%d个学生的姓名:",i);
scanf("%s",stu[i-1].name);
printf("请输入第%d个学生的性别:",i);getchar();
scanf("%c",&stu[i-1].sex);
printf("请输入第%d个学生的年龄:",i);
scanf("%d",&stu[i-1].age);
printf("输入第%d个学生的数学成绩:",i);
scanf("%f",&stu[i-1].score[0]);
printf("输入第%d个学生的英语成绩:",i);
scanf("%f",&stu[i-1].score[1]);
printf("输入第%d个学生的计算机成绩:",i);
scanf("%f",&stu[i-1].score[2]);
M++;printf("\n\n");
printf("序号:%d\n",i);
printf("学号:%s\n",stu[i-1].num);
printf("姓名:%s\n",stu[i-1].name);
printf("性别:%c\n",stu[i-1].sex);
printf("数学:%.2f\n",stu[i-1].score[0]);
printf("英语:%.2f\n",stu[i-1].score[1]);
printf("计算机:%.2f\n",stu[i-1].score[2]);printf("\n\n");
printf("继续或退出(y/n):");getchar();scanf("%c",&k);
if(k=='n'||k=='N')
flag=0;}
4、删除函数
输入学号,通过学号找到对应的学生,从删除项起后面对应的信息前移。同时,用标记flag控制多次删除。
voiddel()
inti,j,flag=1;
charc;
printf("欢迎进入学生信息的删除成功。\n");
{printf("请输入要删除的学号:");
scanf("%s",str);
for(i=0;i if(strcmp(str,stu[i].num) ==0) {for(j=i;j stu[j]=stu[j+1]; printf("删除成功!\n"); M--;break;} if(i==N) printf("无此学号!\n"); printf("继续或退出(y/n):"); getchar(); scanf("%c",&c); if(c=='n'||c=='N')flag=0; 5查找函数 flag=0 inti,flag=1; charm; printf("欢迎进入学生信息的查找!\n"); {printf("请输入要查找的学号:"); if(strcmp(str,stu[i].num)==0) {printf("学号姓名性别年龄高数英语计算机\n"); printf("%-7s%-10s%2c%7d%10.1f%10.1f%10.1f\n", stu[i].num,stu[i].name,stu[i].sex,stu[i].age,stu[i].score[0], stu[i].score[1],stu[i].score[2]); break; if(i==N)printf("无此学号!\n"); printf("继续或退出(Y/N)"); scanf("%c",&m); if(m=='n'||m=='N') 算法:通过顺序查找法,从N=0到N-1循环顺序查找输入的学号,再通过字符串比较函数找到学号的位置i,并通过结构体数组输出学生i一系列的信息;通过标记flag=1进入外层循环,控制多次查找信息。 6、修改函数 输入要修改的学号,通过学号找到对应的学生,再修改其信息,同样,还是利用标记flag控制多次修改。 voidmodify() chark; printf("欢迎进入学生信息的修改!\n"); {printf("请输入要修改的学号:"); {printf("ok!\n"); printf("输出修改前的信息:\n"); printf("学号姓名性别年龄高数英语计算机\n"); printf("%-6s%-10s%3c%7d%11.1f%11.1f%11.1f\n", printf("\n输入修改的分数:\n"); printf("高数英语计算机:"); for(j=0;j<3;j++) scanf("%f",&stu[i].score[j]); printf("输出修改后的信息:\n"); scanf("%c",&k); if(k=='n'||k=='N')flag=0; 7、排序函数 定义结构体变量作为空瓶子,在利用简单选择排序法以后,用k标记每一躺的最大值的位置,在交换信息。利用flag控制返回主菜单。 voidsort() structstudentt; floatsum[N]; floataver[N]; floatf,g; inti,j,k,p,x,flag=1; printf("欢迎进入学生信息的排序!\n"); {for(i=0;i sum[i]=0; for(i=0;i {sum[i]=sum[i]+ stu[i].score[j]; aver[i]=sum[i]/3;} if(sum[x] x=p; g=sum[k];sum[k]=sum[x];sum[x]=g; t=stu[k];stu[k]=stu[x];stu[x]=t; f=aver[k];aver[k]=aver[x];aver[x]=f;} printf("学号姓名性别年龄高数英语计算机总分平均分\n"); printf("%-7s%-10s%2c%7d%10.1f%10.1f%10.1f%9.1f%9.1f\n",