学生管理系统设计C语言程序设计.docx

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

学生管理系统设计C语言程序设计.docx

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

学生管理系统设计C语言程序设计.docx

学生管理系统设计C语言程序设计

1实验目的和意义

1.1目的

在全面掌握《C语言程序设计》课程的知识点的前提下,培养学生分析实际问题的能力,并能够自己编写程序实现对际问题的处理,掌握程序项目开发的一般步骤。

1.2意义

(1)在写程序的过程中要养成良好的习惯为自己省掉很多麻烦。

(2)总体上复习了这一学期学到的大部分程序并把它们系统的连串起来。

(3)学会调试一个程序,知道错在哪里,为什么错。

(4)了解报告的写法,写一个程序的步骤。

(5)能够检查出别人的程序,从别人的程序了解到别人的想法。

 

2系统功能描述及设计

2.1系统化功能描述

学生成绩管理

学生信息至少包括学号(系统随机生成,范围在********—********内,且学号不得相等),姓名,性别,计算机分数,数学分数,英语分数等。

该系统需要能够提供下列功能:

(1)系统以菜单方式工作

(2)学生信息录入功能(学生信息用文件保存)

(3)学生信息浏览功能(能查看所有同学的记录)

(4)学生信息查询功能,查询方式:

1)按学号查询

2)按姓名查询

(5)成绩排序统计功能:

1)按照指定的要求对学生记录进行排序

2)按照指定的学科对成绩进行统计,需要提供该门成绩的:

最高分、最低分、平均分、及格率及在五个分数段的学生人数比率([0,59],[60,69],[70,79],[80,89],[90,100])

(6)学生信息删除,修改功能。

(7)退出系统。

2.2系统功能设计

程序运行以后就会显示菜单界面:

1.学生信息录入,2.学生信息浏览,3.学生信息查询,4.学生信息排序,5.学生信息统计,6.学生信息修改,7.学生信息删除,0.退出系统(图2—1)。

图2—1系统功能模块图

学生信息录入功能:

进入主菜单,选择录入功能所对应的数字,选择你所要录入的学生信息人数,显示出随机学号,顺次依照提示录入学生姓名、性别、数学成绩、英语成绩、计算机成绩。

录入完毕后,会有个提示返回主菜单。

学生信息浏览功能:

主菜单中选择学生信息显示功能,如果你没先录入学生信息,那么则提示出错,打不开文件。

如果有,则会把你所录入的学生成绩一表格形式展示出来.最后提示返回主菜单。

学生信息查询功能:

在主菜单中选择该功能,根据提示选择按学号查询或按姓名查询,根据提示输入你所要查询的学生学号(或姓名),若学号(或姓名)错误,则会提示没有该学生,同时产生继续按学号查找或按姓名查找,根据提示继续输入。

否,则继续输入,当学号或姓名正确时,会把该生的信息展示出来。

学生成绩排序功能:

在主菜单中选择该功能,根据提示选择排序方式学号、英语、数学、计算机、总分,再根据提示选择升序或降序,显示排序的信息接下来按提示选择是返回上级菜单还是返回主菜单。

学生信息统计功能:

:

在主菜单中选择该功能,选择统计的科目英语、数学、计算机或总分,根据你所录入的学生信息,会显示所输入学生的最高分、最低分、平均分、及格率及各分数段的统计,接下来按提示选择是返回上级菜单还是返回主菜单。

学生信息修改功能:

在主菜单中选择该功能,输入需要修改的学生号,若不存在该学号则根据提示继续输入,以至输入正确,显示出该学生的信息,确定是否为该生,确定是否修改,再根据提示输入该学生的信息,接下来系统提示结束或返回主菜单。

学生信息删除功能:

再主菜单中选择该功能,输入需要删除的学生的学号,若不存在该学号则根据提示继续输入,以至输入正确,显示出该学生的信息,确定是否为该生,确定是否删除,若是则提示该学生的信息已删除,接下来系统提示结束或返回主菜单。

结束程序:

根据主菜单界面的提示,输入对应的数字,则结束整个程序。

 

3系统存储结构设计与描述

子函数如下:

voidlist();//显示出菜单

voiddaoru();//把数据从磁盘导入内存

voidsave();//把数据从内存导入磁盘

voidluru();//录入、添加学生信息

voidsuiji(intn);//生成随机数

voidliulan();//浏览已存学生的信息

voidpaixu();//排列学生的信息

voidpaixu_num();//按学号排序

voidpaixu_eng();//按英语成绩排序

voidpaixu_math();//按数学成绩排序

voidpaixu_com();//按计算机成绩排序

voidpaixu_sum();//按总分排序

voidchaxun();//查询学生的信息

voidchaxun_num();//按学号查询

voidchaxun_name();//按姓名查询

voidshanchu();//删除学生信息

voidxiugai();//修改学生的信息

voidend();//结束程序

voidtongji();//统计学生的各科成绩

voidtongji_eng();//统计学生的英语成绩

voidtongji_math();//统计学生的数学成绩

voidtongji_com();//统计学生的计算机成绩

voidtongji_sum();//统计学生的总分

voidprint();//只输入一位学生信息

voidprint_pai_sheng();//按升序输出学生的信息

voidprint_pai_jiang();//按降序输入学生的信息

voidprint_tong(floatmin,floatmax,floataverage,floatpass,floatpoint1,floatpoint2,floatpoint3,floatpoint4,floatpoint5);//输出统计后学生的信息

结构体如下:

staticstructstudent//定义结构体的类型名

{longnum;//学号

charname[10];//姓名

charsex;//性别

floatscore_eng;//英语

floatscore_math;//数学成绩

floatscore_com;//计算机成绩

floatsum;//总分

}stu[M];//结构体的个数

 

4系统功能实现及算法描述

4.1查询函数voidchaxun()

学生信息查询:

根据提示进入查询功能,选择所需的功能(图4—1)。

图4—1查询函数流程图

程序运行以后就会出现主菜单界面,然后你输入查询函数功能对应的数字“3”,然后主函数会调用查询函数。

进入查询函数后输入查询方式按学号查询或按姓名查询,然后查询函数会调用查询方式的函数,输入查找的学号(或姓名),函数运用for()循环找出该学生的信息,系统提示“是否继续查询”根据提示输入,继续查找或返回主菜单。

若没有该学生则提示“不存在这个学号(或姓名)”,根据系统提示,继续按本方法查找或换个方法查找,若输入“1”,则继续按该函数查找,若输入“2”则按另一方式查找。

直到找出该学生为止。

4.2删除函数voidshanchu()

学生信息删除:

根据提示进入删除功能(图4—2)。

图4—2删除函数流程图

程序运行以后就会出现主菜单界面,然后你输入查询函数功能对应的数字“7”,然后主函数会调用删除函数。

进入删除函数后输入需删除的学生的学号,然后查询并显示出该学生的信息,否则继续输入。

确认是否为该学生、是否删除,若是,则系统提示“该学生已删除。

”。

否则,重新输入需删除的学生的学号。

根据提示输入,选择继续删除或返回主菜单。

 

4.3修改功能voidxiugai()

学生信息修改:

根据提示进入修改功能(图4—3)。

图4—3修改程序流程图

程序运行以后就会出现主菜单界面,然后你输入修改函数功能对应的数字“6”,然后主函数会调用修改函数。

进入修改函数后输入需修改的学生的学号,然后查询并显示出该学生的信息,否则继续输入。

确认是否为该学生、是否修改,若是,则根据体统提示输入新的信息。

若否,则重新输入需修改的学生的学号。

再根据提示输入,选择继续修改或返回主菜单。

 

5系统性能测试

5.1菜单功能测试

调试好程序以后,系统自动会显示出以下界面(图5-1)。

然后根据界面上的提示输入系统功能多对应的数字,就会显示出你所需运行的子函数,在按界面提示出入信息。

图5—1主菜单

5.2录入、添加功能测试

选则录入函数功能以后会显示出信息提示如,请选择录入的人数,然后系统自动生成学号并显示出,请输入学生姓名、性别、英语分数、数学分数以及计算机的分数,如下所显示的界面,然后根据系统提示依次输入信息(图5-2)。

图5—2录入学生的信息

5.3浏览功能测试

调用daoru()函数以后,将磁盘中的信息读取到内存,清屏之后显示所有学生的信息(图5—3)。

图5—3学生信息浏览

5.4学生信息查询功能测试

调用daoru()函数以后,将磁盘中的信息读取到内存,清屏之后输入查询方式和查询的信息之后显示查询出的信息(图5—4)。

图5—4查询出的信息

5.5学生成绩排序功能测试

在主菜单中输入操作序号,清屏之后输入排序科目和排序方式之后显示出排序后的信息(图5—5)。

图5—5排序之后显示出的信息

5.6学生信息统计功能测试

在主菜单中输入操作序号,输入统计科目之后显示出统计后的信息(图5—6)。

图5—6统计之后显示出的信息

5.7学生信息修改功能测试

在主菜单中输入操作序号,输入要修改的学生的学号,屏幕输出该学生的信息确定是否修改,输入修改的信息并确定是否返回主菜单(图5—7)。

图5—7修改功能显示

5.8学生信息删除功能测试

在主菜单中输入操作序号,清屏后输入要删除的学生的学号,屏幕输出该学生的信息确定是否删除,删除后确定是否返回主菜单(图5—8)。

图5—8删除功能显示

 

6设计小结

(1)指针是C语言的升级版,会用的话绝对会减少好多麻烦还可以节约纸张。

(2)在输入字符串时要记得回车键时要被接收的。

(3)逻辑错误是麻烦的,它会让你把程序重新写一遍。

(4)要学会调试能帮你找到逻辑错误。

(5)耐心和细心是些C的必要条件,也许好长时间你就纠结一个简单的问题,纠结出来了才发现原来如此简单。

(6)提示输入很重要,平常还感觉不到特别是在循环的时候,没有提示输入就不知道是到了要输入的时候还以为是那些错了呢,现在养成良好的习惯以后就会省掉很多麻烦。

(7)耐心的修改程序,时间长了,修改的多了,就知道错在哪里。

显示的只有一个错误,但是翻上去一看发现有一打的错误,其实不用怕,也许只是犯了个很小白的错误。

 

致谢

对帮助我完成课程设计的本本很感谢,是你一直不眠不休的让我工作,从不罢工,从不闹小脾气,无论有多艰辛都从不喊累。

在我无助的时候,从不放弃我。

深深的感谢你,是在你帮助下我才完成了课程设计。

 

参考文献

[1]谭浩强.C语言课程设计(第三版).北京:

清华大学出版社,1996.5

[2]谭浩强.C程序设计解题及上级指南.北京:

清华大学出版社,2005

[3]鲍有文等.C程序设计试题汇编.北京:

清华大学出版社,1998

 

附录:

源代码清单

#include"stdio.h"

#include"stdlib.h"

#include"time.h"

#include"string.h"

#defineM50

voidlist();

voiddaoru();//把数据从磁盘导入内存

voidsave();//把数据从内存导入磁盘

voidluru();

voidsuiji(intn);

voidliulan();

voidpaixu();

voidpaixu_num();

voidpaixu_eng();

voidpaixu_math();

voidpaixu_com();

voidpaixu_sum();

voidchaxun();

voidchaxun_num();

voidchaxun_name();

voidshanchu();

voidxiugai();

voidend();

voidtongji();

voidtongji_eng();

voidtongji_math();

voidtongji_com();

voidtongji_sum();

voidprint();

voidprint_pai_sheng();

voidprint_pai_jiang();

voidprint_tong(floatmin,floatmax,floataverage,floatpass,floatpoint1,floatpoint2,floatpoint3,floatpoint4,floatpoint5);

inti,j,N=0;

staticstructstudent

{longnum;

charname[10];

charsex;

floatscore_eng;

floatscore_math;

floatscore_com;

floatsum;

}stu[M];

voidmain()

{

intn;

chara;

loop:

list();

scanf("%d",&n);

while(n<0||n>7)

{

printf("选择错误请重新输入:

");

scanf("%d",&n);

}

if(n==0)

end();

else

{

switch(n)

{

case1:

luru();break;

case2:

liulan();break;

case3:

chaxun();break;

case4:

paixu();break;

case5:

tongji();break;

case6:

xiugai();break;

case7:

shanchu();break;

}

printf("\n是否返回主菜单(Y/其它):

");

getchar();

a=getchar();

system("cls");

if(a=='Y'||a=='y')

gotoloop;

else

end();

}

}

voidend()

{

system("cls");

printf("\n\t※※※※※※※※※※※※※※\n");

printf("\n\t\t谢谢您的光临!

");

printf("\n\t\t(^_^)/~~拜拜!

\n");

printf("\n\t※※※※※※※※※※※※※※\n");

}

voiddaoru()//将文件从磁盘导入内存

{

FILE*fp;

intlength;

if((fp=fopen("stu_list.txt","rb"))==NULL)

{

printf("cannotopenthefile\n");

return;

}

fseek(fp,0L,SEEK_END);//使文件指针移向末尾

length=ftell(fp);//求出该文件的字节数长度

rewind(fp);//是文件指针移向文件开头

N=length/sizeof(structstudent);//求出文件中以保存学生的个数

for(i=0;i

fread(&stu[i],sizeof(structstudent),1,fp);

fclose(fp);

}

voidsave()//把数据从内存导入磁盘

{

FILE*fp;

if((fp=fopen("stu_list.txt","wb"))==NULL)

{

printf("cannotopenfile\n");

return;

}

for(i=0;i

if(fwrite(&stu[i],sizeof(structstudent),1,fp)!

=1)

printf("filewriteerror\n");

fclose(fp);

}

voidlist()

{

printf("\n☆☆☆☆☆☆☆☆学生成绩管理系统☆☆☆☆☆☆☆☆☆\n");

printf("\n1.学生信息录入\t\t2.学生信息浏览");

printf("\n3.学生信息查询\t\t4.学生成绩排序");

printf("\n5.学生信息统计\t\t6.学生信息修改");

printf("\n7.学生信息删除\t\t0.退出\n");

printf("\n☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n");

printf("\n\t请输入您需操作的功能的序号:

");

}

voidluru()

{

intn,flag=0;

printf("需要输入学生信息的个数:

");

scanf("%d",&n);

daoru();

suiji(n);

for(i=0;i

{

printf("\n第%d个学生的学号:

%ld\n",i+1,stu[N+i].num);

stu[N+i].sum=0;

printf("\n请输入第%d个学生的姓名:

",i+1);

scanf("%s",stu[N+i].name);

printf("\n请输入第%d个学生的性别(W/M):

",i+1);

getchar();

scanf("%c",&stu[N+i].sex);

printf("\n请输入第%d个学生的英语成绩:

",i+1);

scanf("%f",&stu[N+i].score_eng);

printf("\n请输入第%d个学生的数学成绩:

",i+1);

scanf("%f",&stu[N+i].score_math);

printf("\n请输入第%d个学生的计算机成绩:

",i+1);

scanf("%f",&stu[N+i].score_com);

stu[N+i].sum=stu[N+i].score_eng+stu[N+i].score_math+stu[N+i].score_com;

}

N+=n;

save();

}

voidsuiji(intn)

{

longid;

system("cls");

srand(time(NULL));

for(i=0;i

{

id=(rand()%8889+20091111);

stu[N+i].num=id;

for(j=0;j

if(stu[j].num==stu[i].num)

{

i--;

break;

}

}

}

voidliulan()

{

daoru();

system("cls");

print_pai_sheng();

}

voidchaxun()

{

intn;

system("cls");

printf("1.按学号查询\t2.按姓名查询\n");

printf("请输入查询方式:

");

scanf("%d",&n);

while(n>2||n<1)

{

printf("请选择正确的序号:

");

scanf("%d",&n);

}

daoru();

switch(n)

{

case1:

chaxun_num();break;

case2:

chaxun_name();break;

}

}

voidprint()

{

printf("学号姓名性别英语数学计算机总分\n");

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

printf("%5ld%9s%5c%5.1f%5.1f%5.1f%6.1f\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].score_eng,stu[i].score_math,stu[i].score_com,stu[i].sum);

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

}

voidchaxun_num()

{

longnum,flag;

inta;

charch;

save();

loop:

printf("\n请输入被查找人的学号:

");

scanf("%ld",&num);

for(i=0;i

{

flag=num-stu[i].num;

if(flag==0)

break;

}

if(flag==0)

{

print();

printf("是否继续查询(Y/其它):

");

getchar();

ch=getchar();

if(ch=='Y'||ch=='y')

gotoloop;

}

else

{

printf("不存在这个学号\n");

printf("1.继续按学号查找\t2.按姓名查找\n");

printf("请选择:

");

scanf("%d",&a);

while(a>3||a<1)

{

printf("请选择正确的序号:

");

scanf("%d",&a);

}

if(a==1)

gotoloop;

if(a==2)

chaxun_name();

}

}

voidchaxun_name()

{

intflag=1,a;

charname[10],ch;

save();

printf("请输入被查找人的姓名:

");

scanf("%s",name);

for(i=0;i

{

flag=strcmp(name,stu[i].name);

if(flag==0)

break;

}

if(flag==0)

{

print();

printf("是否继续查询(Y/其它):

");

getchar();

ch=getchar();

if(ch=='Y'||ch=='y')

chaxun_name();

}

else

{

printf("不存在这个姓名\n");

printf("1.继续按姓名查找\t2.按学号查找\n");

printf("请选择:

");

scanf("%d",&a);

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

当前位置:首页 > 总结汇报 > 其它

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

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