学生管理系统C语言课程设计华南理工大学.docx

上传人:b****7 文档编号:10277487 上传时间:2023-02-09 格式:DOCX 页数:28 大小:153.48KB
下载 相关 举报
学生管理系统C语言课程设计华南理工大学.docx_第1页
第1页 / 共28页
学生管理系统C语言课程设计华南理工大学.docx_第2页
第2页 / 共28页
学生管理系统C语言课程设计华南理工大学.docx_第3页
第3页 / 共28页
学生管理系统C语言课程设计华南理工大学.docx_第4页
第4页 / 共28页
学生管理系统C语言课程设计华南理工大学.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

学生管理系统C语言课程设计华南理工大学.docx

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

学生管理系统C语言课程设计华南理工大学.docx

学生管理系统C语言课程设计华南理工大学

C语言程序设计

课程设计报告

设计题目:

学生成绩管理系统

 

学号

班级

姓名

完成方式:

(单选)

自我评分:

(单选)

●独立完成

●优秀

○参考他人工作的基础上完成

○良好

○在他人的帮助下完成

○中等

○完整拷贝他人成果

○及格

○不及格

2011年5月11日

C语言课程设计任务书3

题目:

学生成绩管理系统

功能:

学生成绩管理系统,每个学生是一个记录,包括学号,姓名,性别,3门课程成绩。

系统

要求实现以下功能:

1、信息录入:

录入学生成绩信息(包括学生学号、姓名、各门课程的成绩等);

2、信息查询:

输入学号,查询学生各门课程的成绩,并显示。

3、排序:

按各门课程的成绩平均分进行排序,并显示。

4、信息删除与修改——输入学号,删除该学生的成绩信息。

分步实施:

1、初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数。

2、建立一个文件,将每位学生的信息写入文件中并能显示于屏幕上。

3、完成上述信息查询(学生学号、姓名等)、排序、信息删除与修改功能。

要求:

1、用C语言实现程序设计;

2、利用结构体数组实现学生信息的数据结构设计;

3、系统的各个功能模块要求用函数的形式实现;

4、界面友好(良好的人机交互),程序加必要的注释。

课程设计实验报告要求:

 

一、总体设计

1.程序的总体设计

2.数据结构

结构体数组

structstudent/*定义结构体变量student*/

{

intnum;

charname[10];

intgen;

intch,en,math,tot;

};

StructstudentStu[100];

3.函数原型声明的说明(功能,参数,返回值)

1).输出不及格名单:

voidfailsbj(intn,structstudentstu[])/*输出不及格的名单,只要有一科不及格即进入名单*/

2).计算平均分

voidsumup(int*n,structstudent(*stu)[])/*计算每个人各科平均分的函数*/

3).打印所有数据

voiddisplay(intn,structstudentstu[])/*输出所有数据*/

4).检索

voidsearch(intn,structstudentstu[])/*依照名字或者数字搜索条目*/

5).排序

voidassort(intn,structstudent(*stu)[])/*排序模块*/

6).增加条目

voidadd(int*n,structstudent(*stu)[])/*加入条目模块*/

7).删除条目

voiddel(int*n,structstudent(*stu)[])/*删除条目模块*/

8).编辑条目

voidedit(int*n,structstudent(*stu)[])/*编辑条目模块*/

9).导出列表

voidsave(int*n,structstudent(*stu)[])/*将结果另存为*/

10).统计分析

voidanlz(int*n,structstudent(*stu)[])/*统计全班成绩,包括求出各分数段人数,各科班平均分*/

4.流程图

二、详细设计

1.主程序如上图。

2.功能之“输出不及格名单”:

用for循环扫描每个同学的信息,如果某同学的语文、英语或数学成绩不及格(<60分),即输出该同学的条目。

3.功能之“排序”:

本系统提供六种排序,分别如下:

0.Accordingtothestudentnumber

1.Accordingtotheaveragescores.

2.AccordingtothescoresofChinese.

3.AccordingtothescoresofEnglish.

4.AccordingtothescoresofMathematics.

5.Bygender\*性别以1和0代替*\

6.Byname

即根据学号、平均分、单科成绩、性别、姓名排序。

根据用户要求的排序方法,用冒泡排序法排序。

4.功能之“删除条目”:

先列出所有学生的条目,要求用户输入欲删除的学号,搜索该学号,确定该学号对应条目的编号。

删除方式为,将该条目之后的所有条目逐个复制到前一个位置,以覆盖欲删除的条目,最后将条目总数减一。

5、功能之“编辑条目”:

先要求用户输入欲更改条目的学号,通过查找得到该学号对应的编号,要求用户输入欲更改的条目属性以及目标值。

然后直接修改该属性。

6.功能之“增加条目”:

要求用户键入欲增条目的详细信息,包括学号、姓名、性别、语文成绩、英语成绩、数学成绩。

然后新增条目。

7.功能之“检索”:

要求用户输入欲检索的是姓名还是数字信息。

若是姓名,则检索条目中是否有该姓名的学生,若有,则把条目输出;若是数字信息,则检索条目中是否有包含该数字的条目(包括学号、性别、成绩),把检索结果输出。

8.功能之“打印数据”:

把所有数据逐条输出,每个条目占一行。

9.功能之“统计分析”:

定义整形变量作为计数器,遍历所有条目,统计每种情况的学生人数。

其中包括语文、英语、数学的各分数段人数,分数区间为(0,60)、(60,70)、(70,80)、(80,90)、(90,100)。

并统计各科平均分。

将统计结果打印在屏幕上。

10.功能之“导出”:

导出文件为output.txt,放在默认目录下。

 

三、测试及调试(程序运行截图,测试方案、存在的问题及解决方法)

程序调试时主要运用了单步执行、设置breakpoint、跟踪变量等方法。

具体测试方案为:

1.通过编译检错,将检测出来的bug逐个更正。

2.运行程序,逐个功能模块测试。

若出现死循环则按Ctrl+F2强制退出。

3.单步执行并跟踪变量。

确定死循环的位置,分析其原因。

4.若有bug出现在某函数中,则应在函数中添加breakpoint,执行程序,跳到该breakpoint后,单步执行并跟踪变量。

调试过程中遇到的问题:

1.在编写“添加新条目”模块时,最早的做法是用scanf命令一次性读入学号、姓名、性别、成绩等属性。

遇到的问题是,因为姓名为字符串格式,性别为整形格式,因此,读取字符串时并不以空格为结束,执行结果会将姓名后面的性别等属性也当作姓名输入。

提出的解决办法是:

逐个读取属性,每读取一个属性之前有文本提示。

因此,每读取一个属性必须以回车结束。

此时,在读取字符串的时候,遇到回车即结束读取,于是不再出现原来的问题了。

2.遇到的问题:

在打印所有数据时,往往窗口不足以显示所有数据。

解决方案:

此时,在打印的循环语句中加入一句——if(i%10==0)getchar()。

此时每显示十个数据,需要读入一个回车符才能继续显示。

3.遇到的问题:

使用scanf命令不能把输入的数据保存到变量中,甚至于蓝屏重启。

问题原因:

变量前漏了加&。

解决办法:

在变量前加上&。

测试数据为:

Input.txt

1345Koo1936888

1933Jay1697378

1534Kate0858469

0432William1988689

0538Mary0799995

1370Xiaopeng1458656

532Babe0546545

1934ALai1899067

538Lich198887890

显示所有数据:

主面板:

输出成绩不及格的同学:

按照个人平均分排序后:

各科各分数段人数统计:

四、小结(收获和建议)

这次本次课程设计,提供了一次绝好的机会让我重新复习了大一学过的C程序设计课程。

为此,我利用了一个下午的时间把大一学过的知识重新梳理了一遍。

通过自主设计一个系统,我把原来学到的理论知识提升到了运用的层次。

我在编写这个系统的时候,遇到了很多的错误,更正程序的bug耗费了很多的时间,但这是值得的,因为bug对于每一个程序员来说都是难以避免的。

在不断修正bug的过程中,我提升了自己调试程序、排查错误的能力。

并且让我对C语言的认识进一步加深,特别是在指针的使用方面。

这也是我第一次设计一个实用的程序。

此过程让我掌握了编写设计一个软件的基本方法。

附件:

主要源程序代码

#include

#include

#include

structstudent/*定义结构体变量student*/

{

intnum;

charname[10];

intgen;

intch,en,math,av;/*语文、英语、数学、平均分*/

};

voidsumup(int*n,structstudent(*stu)[])/*计算每个人各科平均分的函数*/

{

inti;

for(i=1;i<=*n;i++)

{

(*stu)[i].av=(*stu)[i].ch+(*stu)[i].en+(*stu)[i].math;

(*stu)[i].av=(*stu)[i].av/3;

};

}

voidfailsbj(intn,structstudentstu[])/*输出不及格的名单,只要有一科不及格即进入名单*/

{

inti,c,e,m;

printf("\nThestudentslistedbelowfailinatleastonesubjects:

\n");

printf("-------------------------------------\n");

for(i=1;i<=n;i++)

{if(((stu[i].ch)<=60)||((stu[i].en)<=60)||((stu[i].math)<=60))

{printf("\n%d|",i);

printf("Num=%d",stu[i].num);

printf("Name=%s",stu[i].name);

printf("Gen=%d",stu[i].gen);

printf("Ch=%d",stu[i].ch);

printf("En=%d",stu[i].en);

printf("Math=%d",stu[i].math);

printf("Average=%d\n",stu[i].av);

};

};

printf("-------------------------------------\n");

};

voiddisplay(intn,structstudentstu[])/*输出所有数据*/

{inti;

printf("\n\nItemsareasshownbelow:

\n");

printf("-------------------------------------\n");

for(i=1;i<=n;i++)

{printf("\n%d|",i);

printf("Num=%d",stu[i].num);

printf("Name=%s",stu[i].name);

printf("Gen=%d",stu[i].gen);

printf("Ch=%d",stu[i].ch);

printf("En=%d",stu[i].en);

printf("Math=%d",stu[i].math);

printf("Average=%d\n",stu[i].av);

};

printf("-------------------------------------\n");

};

voidsearch(intn,structstudentstu[])/*依照名字或者数字搜索条目*/

{

intinfo;

inti,j,g;

chars[10];

printf("Searchnameorinformation?

\n");

printf("1.information\n");

printf("2.name\n");

printf("3.gender\n");

printf(">>");

scanf("%d",&j);

switch(j)

{

case1:

/*寻找与某数字匹配的条目*/

printf("pleasetypeintheinformationyouwanttosearch:

");

scanf("%d",&info);

printf("-------------------------------------\n");

for(i=1;i<=n;i++)

if((stu[i].num==info)||(stu[i].gen==info)||(stu[i].ch==info)||(stu[i].en==info)||(stu[i].math==info)||(stu[i].av==info))

{

printf("num=%d",stu[i].num);

printf("name=%s",stu[i].name);

printf("gen=%d",stu[i].gen);

printf("ch=%d",stu[i].ch);

printf("en=%d",stu[i].en);

printf("math=%d",stu[i].math);

printf("Average=%d\n",stu[i].av);

}

printf("-------------------------------------\n");

break;

case2:

/*寻找与某姓名匹配的条目*/

printf("pleasetypeinthenameyouwanttosearch:

");

scanf("%s",s);

printf("-------------------------------------\n");

for(i=1;i<=n;i++)

if(strcmp(stu[i].name,s)==0)

{

printf("num=%d",stu[i].num);

printf("name=%s",stu[i].name);

printf("gen=%d",stu[i].gen);

printf("ch=%d",stu[i].ch);

printf("en=%d",stu[i].en);

printf("math=%d",stu[i].math);

printf("Average=%d\n",stu[i].av);

};

printf("-------------------------------------\n");

break;

case3:

/*单列某性别的所有条目*/

printf("Whichgender?

\n");

printf(">>");

scanf("%d",&g);

printf("-------------------------------------\n");

for(i=1;i<=n;i++)

if(stu[i].gen==g)

{

printf("num=%d",stu[i].num);

printf("name=%s",stu[i].name);

printf("gen=%d",stu[i].gen);

printf("ch=%d",stu[i].ch);

printf("en=%d",stu[i].en);

printf("math=%d",stu[i].math);

printf("Average=%d\n",stu[i].av);

};

printf("-------------------------------------\n");

break;

default:

;

};

};

voidassort(intn,structstudent(*stu)[])/*排序模块*/

{

inti,j,num;

structstudentstt;

printf("Howtoassort?

:

\n");/*操作面板*/

printf("0.Accordingtothestudentnumber\n");

printf("1.Accordingtothetotalscores.\n");

printf("2.AccordingtothescoresofChinese.\n");

printf("3.AccordingtothescoresofEnglish.\n");

printf("4.AccordingtothescoresofMathematics.\n");

printf("5.Bygender\n");

printf("6.Byname\n");

printf(">>");

scanf("%d",&num);

switch(num)

{case0:

/*根据学号排序*/

for(i=1;i<=n;i++)

for(j=i+1;j<=n;j++)

if((*stu)[i].num>(*stu)[j].num)

{

stt=(*stu)[i];

(*stu)[i]=(*stu)[j];

(*stu)[j]=stt;

};

break;

case1:

/*根据个人各科总分排序*/

for(i=1;i<=n;i++)

for(j=i+1;j<=n;j++)

if((*stu)[i].tot>(*stu)[j].av)

{

stt=(*stu)[i];

(*stu)[i]=(*stu)[j];

(*stu)[j]=stt;

};

break;

case2:

/*根据语文成绩排序*/

for(i=1;i<=n;i++)

for(j=i+1;j<=n;j++)

if((*stu)[i].ch>(*stu)[j].ch)

{

stt=(*stu)[i];

(*stu)[i]=(*stu)[j];

(*stu)[j]=stt;

};

break;

case3:

/*根据英语成绩排序*/

for(i=1;i<=n;i++)

for(j=i+1;j<=n;j++)

if((*stu)[i].en>(*stu)[j].en)

{

stt=(*stu)[i];

(*stu)[i]=(*stu)[j];

(*stu)[j]=stt;

};

break;

case4:

/*根据数学成绩排序*/

for(i=1;i<=n;i++)

for(j=i+1;j<=n;j++)

if((*stu)[i].math>(*stu)[j].math)

{

stt=(*stu)[i];

(*stu)[i]=(*stu)[j];

(*stu)[j]=stt;

};

break;

case5:

/*根据性别排序*/

for(i=1;i<=n;i++)

for(j=i+1;j<=n;j++)

if((*stu)[i].gen>(*stu)[j].gen)

{

stt=(*stu)[i];

(*stu)[i]=(*stu)[j];

(*stu)[j]=stt;

};

break;

case6:

/*根据姓名排序*/

for(i=1;i<=n;i++)

for(j=i+1;j<=n;j++)

if(strcmp((*stu)[i].name,(*stu)[j].name)>0)

{

stt=(*stu)[i];

(*stu)[i]=(*stu)[j];

(*stu)[j]=stt;

};

break;

default:

;

};

display(n,*stu);

};

voidadd(int*n,structstudent(*stu)[])/*加入条目模块*/

{

structstudentstn;

printf("\nPleasetypethenewitemhere:

");

printf("\nThestudentnumberis");

scanf("%d",&stn.num);

printf("\nWhatisthename?

");

scanf("%s",&stn.name);

printf("\nWhatisthegender?

");

scanf("%d",&stn.gen);

printf("\nThemarksofChineseis:

");

scanf("%d",&stn.ch);

printf("\nThemarksofEnglishis:

");

scanf("%d",&stn.en);

printf("\nThemarksofMathematicsis:

");

scanf("%d",&stn.math);

(*n)++;

(*stu)[*n]=stn;

sumup(n,stu);/*修改后重新计算平均分*/

display(*n,*stu);

};

voiddel(int*n,structstudent(*stu)[])/*删除条目模块*/

{

inti,j,k,b,m;

structstudentstnul={0};

b=0;

printf("\nWhichstudentnumberdoyouwanttodelete?

");

scanf("%d",&m);

for(i=1;i<=*n;i++)

if((*stu)[i].num==m)

{b=1;break;}

if(b==1)

{

for(j=i;j<=*n-1;j++)

(*stu)[j]=(*stu)[j+1];

(*stu)[*n]=stnul;

(*n)--;

}

else

printf("\nCan'tnotfind%d\n",m);

sumup(n,stu);/*修改后重新计算平均分*/

display(*n,*stu);

};

voidedit(int*n,structstudent(*stu)[])/*编辑条目模块*/

{

inti,j,num1;

printf("Whichonedoyouwanttoedit?

Please

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

当前位置:首页 > PPT模板 > 商务科技

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

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