C 语言课程设计报告.docx
《C 语言课程设计报告.docx》由会员分享,可在线阅读,更多相关《C 语言课程设计报告.docx(23页珍藏版)》请在冰豆网上搜索。
C语言课程设计报告
C语言课程设计报告:
学生成绩管理系统
系统需求
一、当前学生信息:
通过结构体structstudent来保存学生的姓名,学号,性别,语文,数
学,英语和计算机等等相关信息,并且通过cin函数来进行给当前学生输入初始信息.
二、学生成绩查询:
输入一个学号,在文件中查找此学生,若找到则输出此学生的全部信息
和成绩;若找不到则输出查找失败的信息.同时也可以全部把各科的平均成绩,最高和最低
分输出。
三、新生插入:
通过给该生的学号来和原班上的学生的学号比较大小,若大就在后,若小
则靠前排,将此生的信息保存下来。
四、输出全部学生信息和全部学生成绩。
五、退出系统.
六、附加说明:
系统将来完善的功能有:
可以通过性别来模糊查询,也可以通过姓名的姓来
先进行模糊查询,以便后面精确查找。
总体设计
一、仔细阅读系统要求,首先将此系统化分为如下模块(即如下函数)
1、输入初始的学生信息:
其中包括学生的姓名、学号和性别以及学生的语文、数学、英语
和计算机等相关信息;可用函数cin(stu*p1)来实现此操作。
2、查询模块:
可用stu*lookdata(stu*p1)来实现。
找到就输出此学生全部信息包括学生的
语文、数学、英语和计算机等的成绩。
3、插入模块:
可用insert()函数来实现。
其中通过学号的大小来比较的,并且以此来排
序。
4、输出学生的信息以及成绩:
通过学生的姓名来查看学生的语文、数学、英语和计算机等
相关成绩,同时也可以分别通过caverage()、maverage()、eaverage()和comaverage()来
输出语文、数学、英语和计算机等成绩的平均分数、最高和最低分数。
5、退出系统:
可用一个函数exit()来实现,首先将信息保存到文件中,释放动态创建的
内存空间,再退出此程序。
二、系统主模块结构图:
详细设计
一、界面设计
此系统界面采用图形和数字化菜单设计。
主界面设计如下:
学生成绩管理系统
请选择相应的数字执行相应的功能:
1:
是否输入其他数据
2:
查看数据
3:
插入数据
4:
查找数据
5:
更新数据
6:
保留数据
7:
显示或打印数据
8:
语文成绩状况
9:
数学成绩状况
10:
英语成绩状况
11:
计算机成绩状况
12:
?
13:
退出系统
二、数据结构设计:
程序设计中用到的结构体类型:
学生信息结构体类型:
typedefstructstudent{
charname[MAX];
intnum[MAX];
charsex[MAX];
intchinese;
intmathematic;
intenglish;
intcomputer;
structstudent*next;
}
程序代码:
//原始密码是123456
#include"stdio.h"
#include"stddef.h"
#include"stddef.h"
#include"string.h"
#defineMAX10
typedefstructstudent{/*定义结构体*/
charname[MAX];/*姓名*/
intnum[MAX];/*学号*/
charsex[MAX];/*性别*/
intchinese;/*语文*/
intmathematic;/*数学*/
intenglish;/*英语*/
intcomputer;/*计算机*/
structstudent*next;/*结构体指针*/
}stu;
stu*head;/*头指针*/
voidprint()/*显示或打印函数*/
{
system("cls");
printf("\t\t\tScoreManageSystem\n");/*成绩管理系统*/
printf("<1>EnterRecord\t");/*输入数据*/
printf("<2>Display\t");/*显示*/
printf("<3>Insert\t");/*插入数据*/
printf("<4>Quest\t");/*访问数据*/
printf("<5>Update\t");/*以前数据*/
printf("<6>Save\t");/*保留数据*/
printf("<7>Fresh\t");/*更新数据*/
printf("<8>ChineseAverage\t");/*语文平均成绩*/
printf("<9>MathAverage\t");/*数学平均成绩*/
printf("<10>EnglishAverage\t");/*英语平均成绩*/
printf("<11>ComputerAverage\t");/*计算机平均成绩*/
printf("<12>Quit\t\n");/*退出*/
}
voidcin(stu*p1)/*输入相关数据的函数*/
{printf("Entername:
\n");
scanf("%s",&p1->name);
printf("Enternum:
\n");
scanf("%d",&p1->num);
printf("Entersex:
\n");
scanf("%s",&p1->sex);
printf("Enterscore:
\n");
printf("Enterchinese:
\n");
scanf("%d",&p1->chinese);
printf("Entermath:
\n");
scanf("%d",&p1->mathematic);
printf("EnterEnglish:
\n");
scanf("%d",&p1->english);
printf("EnterComputer:
\n");
scanf("%d",&p1->computer);
}
stu*cindata()/*其他数据是否继续输入的函数*/
{stu*p1,*p2;
inti=1;
charch;
p1=(stu*)malloc(sizeof(stu));
head=p1;
while(i)
{
cin(p1);
printf("DoyouWanttoContinue?
yesorno");/*是否继续输入数据*/
ch=getchar();
ch=getchar();
if(ch=='n'||ch=='N')
{i=0;
p1->next=NULL;
}
else
{p2=p1;
p1=(stu*)malloc(sizeof(stu));
p2->next=p1;
}
}
return(p1->next);
}
stu*lookdata(stu*p1)/*查看数据的函数*/
{
while(p1!
=NULL)
{printf("Num:
%d\t",p1->num);
printf("Name:
%s\t",p1->name);
printf("Sex:
%s\t",p1->sex);
printf("\n");
printf("Chinese:
%d\t",p1->chinese);
printf("Math:
%d\t",p1->mathematic);
printf("English:
%d\t",p1->english);
printf("Computer:
%d\t",p1->computer);
printf("\n");
p1=p1->next;
}
returnp1;
}
voidinsert()/*通过比较学号来插入数据的函数*/
{stu*p1,*p3,*p2;
charch;
p1=head;
p3=(stu*)malloc(sizeof(stu));
p3->next=NULL;
if(head==NULL){head=p3;return;}
cin(p3);
while(p1!
=NULL&&(p1->numnum))/*通过学号的比较来插入*/
{p2=p1;p1=p1->next;}
if(p2==head){p3->next=head;head=p3;return;}
p3->next=p1;
p2->next=p3;
}
find(stu*p2)/*通过姓名查找查看数据的函数*/
{charname[20];
intb=0;
printf("Enterthenameofthestudentyouwanttofind:
");/*通过姓名查看*/
scanf("%s",name);
while(p2!
=NULL)
{if(strcmp(name,p2->name)==0)
{
printf("Thedatayouwanthasbefound\n");
printf("Name:
%s\t",p2->name);
printf("Num:
%d\t",p2->num);
printf("sex%s\t",p2->sex);
printf("\n");
printf("Chinese:
%d\t",p2->chinese);
printf("Math:
%d\t",p2->mathematic);
printf("English:
%d\t",p2->english);
printf("Computer:
%d\t",p2->computer);
printf("\n");
b=1;
}
elseif(b==0)
printf("sorrynotfinddata!
");
p2=p2->next;
}
if(b==1)
{
print();
printf("Findone\n");}
else
{print();
printf("Notfind\n");
}
}
voidcaverage()/*求各学生语文平均分、最高和最低分成绩的函数
*/
{stu*p1;
inti;
floatmax=0.0,min=200.0;
floatsum=0.0,aver=0;
p1=head;
if(p1==NULL)
printf("notdata!
");
else
{for(i=0;p1!
=NULL;i++,p1=p1->next)
sum+=p1->chinese;
aver=sum/i;
p1=head;
for(i=0;p1!
=NULL;i++,p1=p1->next)
{if(maxchinese)
max=p1->chinese;
}
p1=head;
for(i=0;p1!
=NULL;i++,p1=p1->next)
if(min>p1->chinese)
min=p1->chinese;
}
printf("ChineseAverage:
%f",aver);
printf("ChineseMax:
%f",max);
printf("ChineseMin:
%f",min);
}
voidmaverage()/*求各学生数学平均分、最高和最低分成绩的函
数*/
{stu*p1;
inti;
floatmax=0.0,min=200.0;
floatsum=0.0,aver=0;
p1=head;
if(p1==NULL)
printf("notdata!
");
else
{for(i=0;p1!
=NULL;i++,p1=p1->next)
sum+=p1->mathematic;
aver=sum/i;
p1=head;
for(i=0;p1!
=NULL;i++,p1=p1->next)
{if(maxmathematic)
max=p1->mathematic;
}
p1=head;
for(i=0;p1!
=NULL;i++,p1=p1->next)
if(min>p1->mathematic)
min=p1->mathematic;
}
printf("MatheAverage:
%f",aver);
printf("MatheMax:
%f",max);
printf("MatheMin:
%f",min);
}
voideaverage()/*求各学生英语平均分、最高和最低分成绩的函数*/
{stu*p1;
inti;
floatmax=0.0,min=200.0;
floatsum=0.0,aver=0;
p1=head;
if(p1==NULL)
printf("notdata!
");
else
{for(i=0;p1!
=NULL;i++,p1=p1->next)
sum+=p1->english;
aver=sum/i;
p1=head;
for(i=0;p1!
=NULL;i++,p1=p1->next)
{if(maxenglish)
max=p1->english;
}
p1=head;
for(i=0;p1!
=NULL;i++,p1=p1->next)
if(min>p1->english)
min=p1->english;
}
printf("EnglishAverage:
%f",aver);
printf("EnglishMax:
%f",max);
printf("EnglishMin:
%f",min);
}
voidcomaverage()/*求各学生计算机平均分、最高和最低分成绩的函数*/
{stu*p1;
inti;
floatmax=0.0,min=200.0;
floatsum=0.0,aver=0;
p1=head;
if(p1==NULL)
printf("notdata!
");
else
{for(i=0;p1!
=NULL;i++,p1=p1->next)
sum+=p1->computer;
aver=sum/i;
p1=head;
for(i=0;p1!
=NULL;i++,p1=p1->next)
{if(maxcomputer)
max=p1->computer;
}
p1=head;
for(i=0;p1!
=NULL;i++,p1=p1->next)
if(min>p1->computer)
min=p1->computer;
}
printf("ComputerAverage:
%f",aver);
printf("ComputerMax:
%f",max);
printf("ComputerMin:
%f",min);
}
update(stu*p2)/*通过姓名查找来更新数据*/
{
charname[10];/*p2为指向结构体structstudent的指针*/
intb=0;
printf("EnterTheName");/*输入姓名*/
scanf("%s",name);
while(p2!
=NULL)
{if(strcmp(name,p2->name)==0)
{
printf("Findyoudata\n");
scanf("Name:
%s",p2->name);
scanf("Num:
%s",p2->num);
scanf("Sex:
%s",p2->sex);
scanf("Chinese:
%d",p2->chinese);
scanf("Math:
%d",p2->mathematic);
scanf("english:
%d",p2->english);
scanf("Computer:
%d",p2->computer);
printf("Success!
");
b=1;}
elseif(b==0)
printf("SorrynotFinddata!
");
p2=p2->next;}
if(b==0)
{print();
printf("SorrynotFinddata!
");
}
else
{
print();
printf("Finish!
");
}
}
save(stu*p2)/*保留数据函数*/
{
FILE*fp;
charfile[10];
printf("Enterfilename");/*输入文件名*/
scanf("%s",file);
fp=fopen(file,"w");
while(p2!
=NULL)
{
fprintf(fp,"%s",p2->name);
fprintf(fp,"%s",p2->num);
fprintf(fp,"%s",p2->sex);
fprintf(fp,"%d",p2->chinese);
fprintf(fp,"%d",p2->mathematic);
fprintf(fp,"%d",p2->english);
fprintf(fp,"%d",p2->computer);
p2=p2->next;
}
fclose(fp);
}
charpassword[7]="123456";/*定义初始密码*/
voidmain()/*主函数*/
{intchoice;
stu*p2;
chars[8];
intflag=0,i;/*标志项*/
intn=3;
do{printf("Enterpassword:
\n");
scanf("%s",s);
if(!
strcmp(s,password))/*进行密码匹配验证*/
{printf("PASS\n\n\n");
flag=1;
break;
}
else{
printf("ErrorEnteragain:
\n");
n--;
}
}
while(n>0);
if(!
flag)
{printf("youhaveEnter3times!
");/*输入密码超过了3次!
!
*/
exit(0);/*自动退出*/
}
/*密码验证成功后进入的界面*/
printf("~~~~~~~~~~\t\t\t~~~~~~~~~~~~\n");/*操作界面*/
printf("\t\tWelcomtotheMis\n");
printf("Author:
-----\tClass:
------\tNum:
------\n");/*作者,班级和号码*/
printf("Adress:
HG\n");/*地址*/
printf("%%%%%%%%%%%%%%%%%%%%%%%%%%%\n");
printf("\t\tEnterOP:
\n");
printf("\n\n\n\n");
printf("==============\t\t==============\n");
printf("==============\t\t==============\n");
printf("\t\tEntertheMISyesorno\n");/*问进入系统与否*/
scanf("%d",&choice);
if(choice=='n'||choice=='N')
exit
(1);
print();
while
(1)
{
printf("Enterchoice:
");
scanf("%d",&i);
if(i<1||i>13)
{
printf("Enternumfrom1to13:
\n");/*再从1-13中进行选择*/
exit
(1);
}
switch(i)
{case1:
p2=cindata();/*其他数据是否继续输入的函数*/
break;
case2:
p2=lookdata(head);/*查看数据的函数*/
break;
case3:
insert();/*通过比较学号来插入数据的函数*/
break;
case4:
find(head);/*通过姓名查找查看数据的函数*/
break;
case5:
update(head);/*通过姓名查找来更新数据*/
break;
case6:
save(head);/*保留数据函数*/
break;
case7:
print();/*显示或打印函数*/
break;
case8:
caverage();/*求各学生语文平均分、最高和最低分成绩的函数*/
break;
case9:
maverage();/*求各学生数学平均分、最高和最低分成绩的函数*/
break;
case10:
eaverage();/*求各学生英语平均分、最高和最低分成绩的函数*/
break;
case11:
comaverage();/