C语言课程设计报告 学生成绩管理系统Word格式文档下载.docx

上传人:b****2 文档编号:5279138 上传时间:2023-05-04 格式:DOCX 页数:37 大小:432.97KB
下载 相关 举报
C语言课程设计报告 学生成绩管理系统Word格式文档下载.docx_第1页
第1页 / 共37页
C语言课程设计报告 学生成绩管理系统Word格式文档下载.docx_第2页
第2页 / 共37页
C语言课程设计报告 学生成绩管理系统Word格式文档下载.docx_第3页
第3页 / 共37页
C语言课程设计报告 学生成绩管理系统Word格式文档下载.docx_第4页
第4页 / 共37页
C语言课程设计报告 学生成绩管理系统Word格式文档下载.docx_第5页
第5页 / 共37页
C语言课程设计报告 学生成绩管理系统Word格式文档下载.docx_第6页
第6页 / 共37页
C语言课程设计报告 学生成绩管理系统Word格式文档下载.docx_第7页
第7页 / 共37页
C语言课程设计报告 学生成绩管理系统Word格式文档下载.docx_第8页
第8页 / 共37页
C语言课程设计报告 学生成绩管理系统Word格式文档下载.docx_第9页
第9页 / 共37页
C语言课程设计报告 学生成绩管理系统Word格式文档下载.docx_第10页
第10页 / 共37页
C语言课程设计报告 学生成绩管理系统Word格式文档下载.docx_第11页
第11页 / 共37页
C语言课程设计报告 学生成绩管理系统Word格式文档下载.docx_第12页
第12页 / 共37页
C语言课程设计报告 学生成绩管理系统Word格式文档下载.docx_第13页
第13页 / 共37页
C语言课程设计报告 学生成绩管理系统Word格式文档下载.docx_第14页
第14页 / 共37页
C语言课程设计报告 学生成绩管理系统Word格式文档下载.docx_第15页
第15页 / 共37页
C语言课程设计报告 学生成绩管理系统Word格式文档下载.docx_第16页
第16页 / 共37页
C语言课程设计报告 学生成绩管理系统Word格式文档下载.docx_第17页
第17页 / 共37页
C语言课程设计报告 学生成绩管理系统Word格式文档下载.docx_第18页
第18页 / 共37页
C语言课程设计报告 学生成绩管理系统Word格式文档下载.docx_第19页
第19页 / 共37页
C语言课程设计报告 学生成绩管理系统Word格式文档下载.docx_第20页
第20页 / 共37页
亲,该文档总共37页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

C语言课程设计报告 学生成绩管理系统Word格式文档下载.docx

《C语言课程设计报告 学生成绩管理系统Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《C语言课程设计报告 学生成绩管理系统Word格式文档下载.docx(37页珍藏版)》请在冰点文库上搜索。

C语言课程设计报告 学生成绩管理系统Word格式文档下载.docx

浏览成绩

退出模块

四.详细设计

1、主函数

【分析】

将各个功能模块设置为菜单选项,方便调用,且执行完每部分功能模块后能够方便返回到系统界面.

【流程图】:

开始

 

显示一系列功能选项

N

输入n,判断n是否是A-H间的字母

Y

根据n的值调用各功能模块函数

结束

【程序代码】:

menu()/*主界面*/

{

intw1;

charn;

/*.变量n保存选择菜单数字,w1判断输入的数字是否在功能菜单对应数字范围内*/

do

puts("

\t\t***************菜单****************\n\n"

);

\t\t\t\tA.录入学生信息"

\t\t\t\tB.修改学生记录"

\t\t\t\tC.删除一个学生记录"

\t\t\t\tD.登记成绩"

\t\t\t\tE.修改成绩"

\t\t\t\tF.浏览全班成绩"

\t\t\t\tG.退出"

puts("

\n\n\t\t************************************\n"

printf("

操作选择(A-H):

[]\b\b"

n=getchar();

\n"

if(n<

'

A'

||n>

H'

w1=1;

/*对选择的数字作判断*/

else

w1=0;

}

while(w1==1);

switch(n)/*选择功能*/

{

case'

:

enter();

break;

/*输入模块*/

case'

B'

modify();

/*修改模块*/

case'

C'

delete();

/*删除模块*/

D'

add();

/*登记成绩模块*/

E'

modify_score();

/*修改成绩模块*/

F'

browse();

/*浏览模块*/

G'

exit(0);

/*退出模块*/

}

main()/*主函数*/

menu();

2、各功能模块设计

(1)输入模块

【数据分析】:

单看各数据信息,学号﹑年龄以及数学﹑英语﹑物理各科成绩和总分均是整型,姓名可以采用字符型数组.数据信息存放在文件中,一条记录对应一个学生,既符合习惯也方便信息管理.把学生的学号﹑姓名﹑年龄﹑各科成绩及总分作为结构体成员,存放若干个学生信息就用结构体数组.

【流程图】:

输入用户要输入学生记录的个数n

i从0到n-1调用输入函数input(i)

调用保存函数save(n)

【程序代码】

enter()/*输入模块*/

inti,n;

Howmanystudents(1-%d)?

"

N);

scanf("

%d"

&

n);

/*要输入的记录个数*/

\nEnterdatanow\n\n"

for(i=0;

i<

n;

i++)

printf("

\nInput%dthstudentrecord.\n"

i+1);

input(i);

/*调用输入函数*/

if(i!

=0)

save(n);

/*调用保存函数*/

printf_back();

/*一个任务结束时让用户选择是浏览还是返回*/

(2)修改模块

【分析】:

该模块的功能是显示所有学生信息,考虑到记录很多,故采用分屏显示。

显示完所有记录后,用户输入要修改学生的学号,根据学号查找学生记录,并提示用户修改该记录的哪部分信息,是学号、姓名、年龄或某科成绩、总分还是所有信息都修改,根据用户选择修改相应信息。

返回主菜单

Y

N

modify()/*修改模块*/

structstudents;

FILE*fp;

inti,n,k,w0=1,w1,w2=0;

n=load();

k=-1;

/*给用户看全部记录以便确认要修改的记录*/

printf_face();

/*调用显示数据结构项目函数*/

for(i=0;

{

if((i!

=0)&

&

(i%10==0))/*目的是分屏显示*/

{

printf("

\n\n请输入您要修改的学生编号(No.073101-).按任意键继续..."

getch();

puts("

\n\n"

}

printf_one(i);

printf("

}

do

\n\n请输入您要修改的学生编号(No.073101-)!

NO.:

073101-"

scanf("

s.num);

/*输入要修改的数据的学号*/

for(i=0;

i++)/*查找要修改的数据*/

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

{

k=i;

/*找到要修改的记录*/

s=stu[i];

/*把stu[i]备份给s,以便用户反悔时恢复*/

}

if(k==-1)printf("

\n\n记录不存在,请重新输入!

while(k==-1);

/*当k=-1表示没有找到*/

printf_one(k);

/*调用显示一个记录的函数*/

w1=modify_data(k,n);

/*修改学生记录并且返回保存控制值w1,w1=1则表示用户已确认修改*/

if(w1==1)/*确认修改*/

\n修改成功!

^_^.\n\n是否继续修改?

\n\n\t1.是2.返回并保存\t[]\b\b"

w0);

w2=1;

/*来控制保存,使w2=1是标记已有过修改*/

else

w0=0;

/*结束*/

if(w2==1)

stu[k]=s;

}/*没有修改,把备份的s恢复,使w0=0是为了让循环终止*/

if(w0!

=1&

w2==1)

save(n);

/*正常返回,且有过修改*/

while(w0==1);

(3)删除模块

该模块的功能是与修改模块一样先显示所有的学生信息,同样考虑到记录很多,采用分屏显示。

显示完所有记录后,用户输入要删除学生的学号,根据学号查找学生记录并删除。

删除一般的做法是将数据从文件中删除,删除位置后面的记录往前挪。

显示所有记录,让用户看哪个要删除

输入要删除的学号

是否找到此学生记录

N

显示找到的记录提示没有找到

使stu[k].sum=0

继续删除?

【程序代码】:

delete()/*删除模块*/

(i%10==0))/*分屏显示*/

\n\n请输入您要删除的学生编号(No.073101-).按任意键继续..."

\n\n请输入您要删除的学生编号(No.073101-)!

/*将要删除的记录备份给s*/

printf("

\n确定删除?

\n\n\t1.是2.此次返回,但不保存[]\b\b"

scanf("

w1);

if(w1==1)

stu[k].sum=0;

/*标记为0后,保存时便不保存*/

\n成功删除!

^_^.\n\n是否继续删除?

/*确认删除*/

/*end*/

/*正常返回且已删除*/

(4)登记成绩模块

该模块的功能是用户需要增加新的学生记录,请从键盘输入并逐条写到原来的输入文件中.

调用加载函数n=load();

并计算可以记录个数n

输入用户要添加学生记录的个数m

K=m+n

i从n到k调用输入函数input(i)

保存添加的记录

add()/*登记成绩模块*/

inti,n,m,k;

您要添加几个学生(1-%d)?

N-n);

m);

/*输入要添加的记录个数*/

k=m+n;

for(i=n;

k;

\n请输入第%d个学生数据.\n"

input(i);

/*调用输入函数*/

if((fp=fopen("

score.txt"

"

ab"

))==NULL)/*以ab方式打开文件,添加保存*/

不能打开此文件.\n"

i++)/*输出到文件*/

if(fwrite(&

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

=1)

文件写入错误.\n"

fclose(fp);

printf_back();

/*一个任务结束时的选择浏览还是返回*/

(5)修改成绩模块

该模块的功能是修改各科成绩或全体成绩。

modify_score()/*修改成绩模块*/

\n\n请输入您要修改成绩的学生编号(No.073101-)!

.按任意键继续..."

/*输入要修改的学生学号*/

/*将要修改的记录备份*/

if(k==-1)

printf("

\n\n记录不存在,请再次输入!

w1=modify_score1(k);

/*调用修改成绩函数*/

^_^.\n\n是否继续修改成绩?

\n\n\t1.是2.保存并返回\t[]\b\b"

/*确认修改*/

/*正常返回且已修改*/

(6)浏览模块

该模块的功能是显示所有学生记录信息。

browse()/*浏览模块*/

inti,j,n;

/*加载记录*/

printf_face();

/*调用显示数据结构项目函数*/

if((i!

(i%10==0))/*分屏显示*/

\n\n按任意键继续..."

getch();

puts("

printf_one(i);

\t共有%d项记录.\n"

n);

\n按任意键返回..."

getch();

/*按任意键*/

3、一些公共函数

下面是在每个模块中都有可能用到的一些公共函数。

(1)保存函数save(intn)

【说明】

形参n控制保存的个数。

当stu[k].sum=0表示删除,不保存该记录。

save(intn)/*保存函数,保存n个记录*/

inti;

wb"

))==NULL)/*以输出打开方式,在此前的记录被覆盖*/

\n不能打开此文件\n"

returnNULL;

if(stu[i].sum!

=0)/*stu[i].sum=0表示该记录已删除*/

if(fwrite(&

文件写入错误\n"

fclose(fp);

(2)加载函数load()

该函数可以用来加载所有记录,并且可以返回所有记录的个数。

load()/*加载记录或可以计算记录个数的函数*/

rb"

!

feof(fp);

fread(&

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

fclose(fp);

return(i-1);

/*返回记录个数*/

(3)学号输入函数no_input(inti,intn)

该函数对输入学号进行判断,确保输入的学号唯一。

形参i表示第i个学生记录,形参n表示总共有n个学生记录。

no_input(inti,intn)/*学号输入函数*/

intk,w1;

w1=0;

NO.:

stu[i].num);

if(stu[i].num<

1||stu[i].num>

N)/*判断学号是否在1到N之间*/

输入错误!

学号只能在(1-N)之间.请重新输入!

w1=1;

if(w1!

for(k=0;

k<

k++)/*比较到第n个学生*/

if(k!

=i&

(stu[k].num==stu[i].num))/*判断学号是否有相同*/

puts("

此记录已存在.请重新输入!

w1=1;

while(w1==1);

(4)输入三科成绩函数enter_score(inti)

形参i表示第i个学生记录。

enter_score(inti)/*输入三科成绩函数*/

数学英语物理"

%d%d%d"

stu[i].Math,&

stu[i].English,&

stu[i].Physical);

/*对分数输入*/

(5)求总分函数sum(inti)

sum(inti)/*对第i个记录的分数求总分*/

stu[i].sum=stu[i].Math+stu[i].English+stu[i].Physical;

(6)输入一个记录的函数input(inti)

input(inti)/*输入一个记录的函数*/

no_input(i,i);

/*调用学号输入函数*/

姓名:

年龄:

%s%d"

stu[i].name,&

stu[i].age);

/*输入姓名、年龄*/

enter_score(i);

/*调用分数输入函数*/

sum(i);

(7)修改成绩函数modify_score1(inti)

形参i表示第i个学生成绩记录,此函数带回保存控制值w1,当w1=1时表示确认保存。

modify_score1(inti)/*修改成绩函数*/

intc,w1;

\n修改=>

\n\n1.数学2.英语3.物理4.总分5.取消并返回"

您需要修改?

/*输入选择作个判断*/

c);

if(c>

5||c<

1)

\n选择错误!

请重新选择!

/*判断选择是否错误*/

getchar();

while(c>

1);

switch(c)/*选择要修改的项目*/

case1:

数学:

stu[i].Math);

case2:

英语:

stu[i].English);

case3:

物理:

case4:

enter_score(i);

/*调用成绩输入函数*/

case5:

0&

c<

5)sum(i);

/*调用求总分函数*/

\n现在:

/*修改后的记录让用户确认*/

\n确认修改?

\n\n\t1.是2.否,重新修改3.此次保存并返回[]\b\b"

/*输入2表示重新修改*/

while(w1==2);

return(w1);

(8)修改记录函数modify_data(inti,intn)

形参i表示第i个学生成绩记录,形参n表示有n个记录,此函数带回保存控制值w1,当w1=1时表示确认保存。

modify_data(inti,intn)/*修改记录函数*/

\n\n1.编号2.姓名3.年龄4.数学5.英语6.物理7.总分8.所有数据9.取消并返回"

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

当前位置:首页 > 总结汇报 > 工作总结汇报

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2