学生成绩管理程序Word格式.docx

上传人:b****8 文档编号:22662688 上传时间:2023-02-05 格式:DOCX 页数:36 大小:23.91KB
下载 相关 举报
学生成绩管理程序Word格式.docx_第1页
第1页 / 共36页
学生成绩管理程序Word格式.docx_第2页
第2页 / 共36页
学生成绩管理程序Word格式.docx_第3页
第3页 / 共36页
学生成绩管理程序Word格式.docx_第4页
第4页 / 共36页
学生成绩管理程序Word格式.docx_第5页
第5页 / 共36页
点击查看更多>>
下载资源
资源描述

学生成绩管理程序Word格式.docx

《学生成绩管理程序Word格式.docx》由会员分享,可在线阅读,更多相关《学生成绩管理程序Word格式.docx(36页珍藏版)》请在冰豆网上搜索。

学生成绩管理程序Word格式.docx

9.查询记录

〔1〕可以按“学号〞、“**〞或“名次〞方式查询记录;

〔2〕能给出查询记录的信息;

〔3〕如果查询的信息不存在,输出提示信息。

10.对记录进展排序

〔1〕可以按学号进展升序或降序排序;

〔2〕可以按名称进展升序或降序排序;

〔3〕可以按名次进展升序或降序排序;

〔4〕如果属于选择错误,可以立即退出排序;

11.头文件

〔1〕使用条件编译定义头文件;

〔2〕函数原型声明;

〔3〕数据构造及包含文件。

12.测试程序

〔1〕应列出测试大纲对程序进展测试;

〔2〕应保证测试用例测试到程序的各种边缘情况。

以上是根本要求,希望通过对此题设计的理解,重新考虑如何改进设计。

二.总体设计

最初的整体规划只是说明它们的可行性,不要求制定函数的具体实现,甚至不需要考虑函数原型。

完成整体规划后,可以按照流程描述各个模块之间的接口功能。

本课程设计对模块设计的要求如下:

(1)要求使用多文件方式实现设计;

(2)要求在各个文件内实现构造化设计

(3)每个模块作为一个单独的C文件,每个文件内的函数如表12-1所示,表中给出了各个函数的功能说明;

(4)宏和数据构造等放在头文件中,并使用条件编译。

本设计有5个C文件〔17个函数〕和一个头文件组成,每个C文件都代表着某

特定的功能,它们的关系如表12-1所示。

本章的设计将更加注意模块化,以便展示C语言的编程风格。

程序包含文件的存、取过程。

它的功能就是按输入顺序建立记录。

如果原来没有记录文件,可以重新建立一个文件;

如果已经有记录,可以先把文件内容输入,然后把新记录追加到原来记录的尾部;

也可以单独建立新文件,以后再使用读取文件的方法拼接。

由上述功能分析可以看到它的全貌。

因为它有并列选择,所以可以用选择菜单方便地实现。

这个菜单具有10个选择项,用switch语句可以实现这些选择。

可以用简洁的伪码对它们进展描述,因为并不复杂,所以不再赘述。

表12-1文件及函数组成

源文件

函数名或其他成分

功能

 

Student.c

main

总控函数

menu-select

菜单项选择择

handle-menu

菜单处理

newrecords

新建学生信息记录

quit

完毕运行

Add-disp.c

showtable

打印表头

getindex

按升序排序的位置

addrecord

在表尾追加信息

display

显示信息

Que-rewv-modi.c

removerecord

删除指定的记录

findrecord

查找指定的信息

queryinfo

查询指定学生的信息

copyrecord

复制记录

modifyrecord

修改指定学生的信息

Save-load

save

文件储存

load

文件读取

Sort.c

sortinfo

排序

Student.h

常数

提供常数

构造声明

学生成绩构造

库函数及函数原型声明

引用库函数及函数

三.函数设计

为一些函数设计两个返回值一曲分歧执行结果是否正确。

每个学生信息资料用一个stuinfo构造来保存,用stuinfo数组全局变量records来保存一批学生的信息资料。

其中的宏定义INITIIAL-SIZE表示数组初始大小,当已经分配的数组大小不够用时,将真假数组的大小,INCR-SIZE为当每次增加的大小。

全局变量numstus表示数组中记录的学生数,arraysize视为数组分配的空间大小。

全局变量savedtag是信息是否已保存的标志,当属组内容被文件保存值文件后,设为“已保存〞状态,当数组内容被修改之后,设为“未保存〞状态。

下面分别描述这些函数,建立它们的函数原型。

1.文件存储操作函数

函数原型:

intsaverecords(void)

功能:

将记录存入默认文件stu_info或者指定文件。

参数:

void

返回值:

成功0,失败-1

工作方式:

数组records被保存至指定文件。

要求:

报告是否有记录可存、是否能正常建立或翻开文件、根据要求执行存入操作并报告存入记录的条数。

2.文件读取操作函数

intloadrecords(void)

将默认文件stu_info或者指定文件里的记录取入内存。

records将为从指定文件中读取出的记录。

报告是否有记录可存、能否能正常翻开文件、是否覆盖已有记录以及读取记录的条数。

3.显示所有学生信息的函数

函数原型:

intdisplay(void)

显示内存里的记录信息

从头部开场逐个显示记录内容

报告是否有记录及记录条数和内容。

4.增加信息函数

函数原型:

voidaddrecord(void)

增加记录

从尾部开场逐个追加记录。

将新记录追加在记录尾部,并对记录进展计数。

5.打印表头函数

voidshowtable(void)

功能:

打印表头

输出一行表头信息

将表头按制表符打印要求。

6.输出在记录中按升序排序的位置

voidgetindex(floatsum)

找出总分为sum在第0至numstus-1个记录中按升序排序的

float,预找出其位置的总分

返回值:

int,sum在第0至numstus-1个记录中按升序排序的

查找并计数

输出位置整数

7.删除记录函数

voidremoverecord(void)

删除内存数组中的制定记录

工作方式:

根据给定的关键字,查找符合的记录并删除。

将后面的记录前移,同时改变名次并给出相关信息。

8.查找指定记录函数

voidfindrecord(char*,int,int)

查找指定的记录。

char*target:

预查找记录的某一项与target一样

intbtargettype:

说明通过哪一项来查找,0为学号,1为**,2为名次

intform:

从第from个记录开场找

int找到的记录的序号,假设找不到那么返回-1。

根据给定的关键字,查找符合记录的序号。

找不到那么返回-1。

9.查询指定学生信息的函数

voidqueryinfo(void)

将一个文件的内容追加到另一个文件的尾部。

可以按照学号、**或名次来查询。

打印查询到的学生的信息或给出相关信息。

10.记录复制函数

voidcopyrecord(stuinfo*,stuinfo*)

将stc指向的一条记录复制给dest指向的记录。

stuinfo*src:

源记录stuinfo*dest:

目的记录。

将源记录逐条复制到目的记录

正确复制字符串。

11.修改指定学生信息函数

voidmodifyrecord(void)

找到指定记录并修改

可以按照学号、**或名次找到要修改的记录,确认前方可修改。

同时需调整名次

12.学生信息排序函数

voidsortinfo(void)

对记录进展排序

可以按照学号、**或名次排序。

升序或降序排序。

13.菜单处理函数

voidhandle_menu(void)

处理选择的菜单命令。

参数:

根据命令,调用相应函数。

给出完毕信息。

14.菜单项选择择函数

intmenu_select(void)

承受用户选择的命令代码。

int

返回命令代码的整数值。

只允许选择规定键,如果输入不合要求,那么提醒用户重新输入。

15.新建学生信息记录的函数

voidnewrecords(void)

重新建立输入信息记录。

根据修要调用saverecords函数。

假设原来信息没有保存,那么保存原来的信息,然后重新输入信息记录。

16.完毕程序运行函数

voidquit(addr*)

完毕程序运行.

根据要求决定在推出前是否将修改的记录存入文件。

完毕运行之前,询问是否对修改的记录进展存储。

17.主函数

voidmain(void)

控制程序。

管理菜单命令并完成初始化。

18.头部文件

文件名称:

student.h

功能:

声明函数原型,包含文件及自定义宏和数据构造。

要求:

报告是否能正常翻开文件执行存入操作及记录的条数。

三.参考程序

1.student.h文件

#ifndefH_STUDENT_HH

#defineH_STUDENT_HH

#include<

stdio.h>

#defineINITIAL_SIZE100//树组初始大小

#defineINCR_SIZE50//数组每次增加的大小

#defineNUM_SUBJECT5//科目数

structstudent_info

{

charnumber[15];

//学号

charname[20];

//**

chargender[4];

//性别

floatscore[NUM_SUBJECT];

//分别为该学生5门课的成绩

floatsum;

//总分

floataverage;

//平均分

intindex;

//名次

};

typedefstructstudent_infostuinfo;

externintnumstus;

//记录的学生数

externstuinfo*records;

//记录学生信息的数组

externcharsavetag;

//信息是否已保存的标志,0为以保存,1位未保存

externintarraysize;

//数组大小

externchar*subject[];

voidhandle_menu(void);

intmenu_select(void);

voidaddrecord(void);

voiddisplay(void);

voidqueryinfo(void);

voidremoverecord(void);

voidsortinfo(void);

intsaverecords(void);

intloadrecords(void);

voidnewrecords(void);

voidquit(void);

voidshowtable(void);

intfindrecord(char*target,inttargettype,intfrom);

intgetindex(floatsum);

voidcopyrecord(stuinfo*src,stuinfo*dest);

#endif//H_STUDENT_HH

2.student.c

student.h>

intnumstus=0;

stuinfo*records=null;

charsavedtag=0;

intarraysize;

char*subject[]={“语文〞,“数学〞,“英语〞,“物理〞,“化学〞};

intmain()

{

//初始化数组

records=(stuinfo*)malloc(stuinfo)*INITIAL_SIZE);

if(records==null)

printf(“memoryfail!

〞);

exit(-1);

}

arraysize=INITIAL_SIZE;

printf(“\n〞);

printf(“\t******************************\n〞);

printf(“\t*这是一个*\n〞);

printf(“\t*学生成绩管理程序*\n〞);

printf(“\t可以对学生成绩进展管理*\n〞);

printf(“\t欢迎使用管理程序*\n〞);

handle_menu();

}

for(;

;

switch(menu_select())

case0:

addrecord();

break;

case1:

modifyrecord();

case2:

display();

case3:

queryinfo();

case4:

removerecord();

case5:

sortinfo();

case6:

saverecords();

case7:

loadrecords();

case8:

newrecords();

case9:

quit();

intmenu_select()

chars[2];

int=0;

printf(“\t0.增加学生信息\n〞);

printf(“\t1.修改学生信息\n〞);

printf(“\t2.显示学生信息\n〞);

printf(“\t3.查询学生信息\n〞);

printf(“\t4.删除学生信息\n〞);

printf(“\t5.对学生信息进展排序\n〞);

printf(“\t6.保存学生信息至记录文件\n〞);

printf(“\t7.从记录文件读取学生信息\n〞);

printf(“\t8.新建学生信息文件\n〞);

printf(“\t9.完毕运行\n〞);

printf(“\n\t左边数字对应功能选择,请选0-9:

gets(s);

=atoi(s);

if(==0&

&

(strcmp(s,〞0〞)!

=0))=11;

//处理键入的非数字键,过滤出数字0

if(<

0||>

9)printf(“\n\t输出错误,重选0—9:

〞);

elsebreak;

return;

//新建学生信息记录

voidnewrecords(void)

charstr[5];

if(numstus!

=0)

printf(“现在已经有记录,选择处理已有记录的方法。

\n〞);

printf(“是否保存原来的记录?

(Y/n)〞);

gets(str);

if(str[0]!

=‘n’&

str[0]!

=‘N’)

numstus=0;

//完毕运行,退出

voidquit(void)

if(savedtag==1)

free(records);

exit(0);

3.add_disp.c

#include<

//打印表头

voidshowtable(void)

intj;

printf(“学号\t**\t性别〞);

for(j=0;

j<

num_subject;

j++)printf(“\t%s〞,subject[j]);

printf(“\t总分\t平均分\t名次\n〞);

//显示所有的学生信息

voiddisplay(void)

inti,j;

if(numstus==0)

printf(“没有可供显示记录!

return;

shoetable();

for(i=0;

i<

numstus;

i++)

//打印学生信息

printf((“%s\t%s\t%s〞,records[i].number,records[i].name,records[i].gender);

for(j=0;

j++)

printf(“\t%.1f〞,records[i].score[j]);

printf(“\t%.1f\t%.1f\t%d\n〞,records[i].sum,records[i].average,records[i].index);

//打印满20个记录后停下来

if(i%20==0&

i!

printf(“输入任意字符后继续…\n〞);

getch();

printf(“\n\n〞);

showtable();

//在当前表的末尾增加新的信息

voidaddrecord(void)

charstr[10];

intj;

floatmark,sum;

printf(“原来没有记录,现在建立新表\n〞);

else

printf(“下面在当前表的末尾增加新的信息\n〞);

while

(1)

printf(“您将要添加一组信息,确定吗?

if(str[0]==‘n’||str[0]==‘N’)//不再添加新的信息

break;

if(numstus>

=arraysize)//数组空间缺乏,需要重新申请空间

records=realloc(records,(arraysize+INCR_SIZE)*sizeof(stuinfo));

if(records==NULL)

printf(“memoryfailed!

exit(-1);

arraysize=arraysize+INCR_SIZE;

printf(“请输入学号:

gets(records[numstus].number);

printf(“请输入**:

gets(records[numstus].name);

printf(“请输入性别〔0为女,1为男〕:

if(str[0]==‘0’)

strcpy(records[numstys].gender,‘女’);

else

strcpy(records[numstys].gender,‘男’);

sum=0;

NUM_SUBJECT;

printf(“请输入%s成绩:

〞,subject[j]);

mark=(float)atof(str);

records[numstus].score[j]=mark;

sum+=mark;

records[numstus].sum=sum;

records[numstus].average=sum/NUM_SUBJE

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

当前位置:首页 > 高等教育 > 医学

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

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