C语言课程设计报告学生成绩管理系统.docx

上传人:b****5 文档编号:4516032 上传时间:2022-12-01 格式:DOCX 页数:17 大小:21.27KB
下载 相关 举报
C语言课程设计报告学生成绩管理系统.docx_第1页
第1页 / 共17页
C语言课程设计报告学生成绩管理系统.docx_第2页
第2页 / 共17页
C语言课程设计报告学生成绩管理系统.docx_第3页
第3页 / 共17页
C语言课程设计报告学生成绩管理系统.docx_第4页
第4页 / 共17页
C语言课程设计报告学生成绩管理系统.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

C语言课程设计报告学生成绩管理系统.docx

《C语言课程设计报告学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《C语言课程设计报告学生成绩管理系统.docx(17页珍藏版)》请在冰豆网上搜索。

C语言课程设计报告学生成绩管理系统.docx

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—>num

{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(max〈p1-〉chinese)

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(max

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(max〈p1—〉english)

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(max〈p1—>computer)

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();/*求各学生计算机平均分、最高和最低分成绩的函数*/

break;

case12:

;/*空操作*/

case13:

exit

(1);/*退出*/

break;

scanf(”%d",&i);

}

}

程序中出现的问题及解决方法

问题一、学生初始信息模块:

其中包括学生的姓名、学号和性别以及学生的语文、数学、英语和计算机等相关信息;可用函数cin(stu*p1)来实现此操作.当正确输入存在的学生学号,系统进行判断时,提示不存在此学生。

解决办法及步骤:

1、一个个输出所有的学生的学号,检查文件中是否有此学生,发现有.

2、既然有此学生,那么检查循环判断是否有此学生的语句发现没有错

3、输出用于循环检查语句中的学生信息,发现乱码

4、仔细分析乱码的原因,最后发现是变量的类型错误,错将学生类型的结构体指针变量定义为了其他类型的指针变量.

问题二、查询模块:

可用stu*lookdata(stu*p1)来实现。

找到就输出此学生全部信息包括学生的语文、数学、英语和计算机等的成绩。

当正确输入查找信息时,系统却不能够得到所要查找的学生信息以及学生的语文、数学、英语和计算机的成绩。

解决办法及步骤:

1、检查所编写的程序代码是否完全正确,若不是,则改之,然后再继续正确输入查找信息看能否得到所要查找的学生信息以及学生的语文、数学、英语和计算机的成绩。

2、检查当我们在输入查找信息时,看是否我们输入的信息有误,若是这样的话,我们应当仔细输入查找信息.

问题三、插入模块:

可用insert()函数来实现。

其中通过学号的大小来比较的,并且以此来排序。

当我们输入插入信息时,系统却提示插入不进数据。

解决办法及步骤:

1、检查所编写的程序代码是否完全正确,若不是,则改之,然后再继续正确输入插入信息看能否插入进去得到所要插入的学生信息以及

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 高中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1