学生成绩管理系统Word文档下载推荐.docx
- 文档编号:18440314
- 上传时间:2022-12-16
- 格式:DOCX
- 页数:37
- 大小:147.80KB
学生成绩管理系统Word文档下载推荐.docx
《学生成绩管理系统Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统Word文档下载推荐.docx(37页珍藏版)》请在冰豆网上搜索。
完成全部学生记录的显示。
4、查找功能:
完成按姓名查找学生记录,并显示。
5、排序功能:
按学生平均成绩进行排序。
6、插入功能:
按平均成绩高低插入一条学生记录。
7、保存功能:
将学生记录保存在任何自定义的文件中,
8、读取功能:
将保存在文件中的学生记录读取出来。
9、有一个清晰美观界面来调用各个功能。
概要设计
学生成绩管理系统有13种功能。
把这13个功能做成13个子函数。
在主函当数中设计一个菜单对这13个子数进行管理。
来实现对整个系统的操作。
根据课题的要求。
每一个学生的包括姓名(char)、学号(char)、M门课程的成绩(float).再加上系统功能上的要求每一学生的信息还要总分和名次等。
所以自然的想到要用结构体来定义每一个学生的信息结构。
然后用链表把它们组成一个有序的整体。
用对链表的操作来实现对所有学生信息的统一管理(成绩显示、成绩排序、成绩修改等)。
最后为了以后按照处理后的顺序保存到文件中。
各函数的功能:
1)程序的模块组成:
主函数:
intmain()
新建函数:
STUDENT*init()
输入函数:
STUDENT*create()
显示函数:
voidprint(STUDENT*h)
删除函数:
STUDENT*delete(STUDENT*h)
按名字寻找函数:
voidsearch(STUDENT*h)
保存函数:
voidsave(STUDENT*h)
按总分排序函数:
STUDENT*sort(STUDENT*h)
计算总分和均分函数:
voidcomputer(STUDENT*h)
修改函数:
STUDENT*Modify(STUDENT*head,STUDENT*new)
按学号排序函数:
STUDENT*index(STUDENT*h)
菜单函数:
intmenu_select()
输入函数:
随时输入数据。
显示系统主菜单。
显示所有学生的信息。
寻找函数:
方便学生查找自己的成绩。
删除某学生的信息。
排序函数:
按总成绩排序。
按学号排序。
插入函数:
可以插入新的信息。
保存函数:
保存好学生成绩,以免丢失。
统计函数:
●显示每门课程成绩最高的学生的基本信息。
●显示每门课程的平均成绩。
●显示超过某门课程平均成绩的学生人数
总体框架:
详细设计
主要功能的实现
整个系统除了主函数外,另外还有14个函数,实现八大功能:
输入功能、显示功能、查找功能、排序功能、插入功能、保存功能、读取功能。
各个函数的详细设计说明分别如下:
主函数main()
利用无限次循环for(;
;
)和swithch()实现各函数的调用,系统根据输入的数字选项来调用相应的函数。
菜单选择函数intmenu_select()
这是一个无参函数,主要实现“功能选择”的界面,在这个界面里有显示系统的九大功能,根据每个功能前面的序号进行选择。
等执行完每一个函数功能后,再自行返回该函数。
初始化函数STUDENT*init()
这是一个无参函数,里面只有两个语句,它的作用是使链表初始化,使head的值为NULL和一个清屏语句。
比如:
没有这个函数的话,在你没有输入任何数据的情况下,去执行显示功能的时候会显示一些乱码!
输入记录函数STUDENT*create()
这是一个无参函数,用来执行第学生成绩记录的输入,当学生为@时停止输入,函数结束后,带回一个指链表头的指针向head。
将下一个学生的信息插在表头。
N-S流程图如下:
head=NULL
无条件循环
指针p指向新开辟的单元
指针p是否为空
是否
输入学号p->
num
输出p->
num是否为@
内存是否
溢出输入姓名p->
name
停止for(i=0;
i<
3;
i++)
输入输入成绩
返回p->
sum=s;
菜单p->
average=(float)s/3;
p->
order=0;
next=head;
head=p;
显示记录函数voidprint(STUDENT*h)
这是一个不返回值的有参函数,形参为“链表头的指针”,负责对全部学生成绩记录的输出,不足之处就是不能对学生成绩进行分页显示。
算法:
先将p结点的指针指向第一个结点,将p结点(即第一个结点)的数据输出。
然后再将p结点的指针指向p指针的的指针(即下一结点),将p结点(即第一结点)的数据输出。
重复执行此步聚直到p指针指向NULL为止。
p=head,使指向第一个结点
输出p所指向的结点
p指向一下个结点
当p指的不是表尾
保存数据到文件函数voidsave(STUDENT*h)
这是一个不返回值的有参函数,形参为“链表头的指针”,可以把学生记录保存在电脑上由自己任意命名的二进制文件。
输入要保存记录的文件地址outfile
文件能打开
p=head;
输出一个出错信
当p不为空时息,并返回菜单
fwrite(p,LEN,1,fp);
(写入一条记录)
p=p—>
next;
(指针后移)
fclose(fp);
(关闭文件)
查找记录函数voidsearch(STUDENT*h)
这是一个不返回值的有参函数,形参为“链表头的指针”,实现按学号对某个学生进行查找,并显示所查找到的记录。
采用线性查找法往下一个结点查找。
输入所要查找的学生的学号s,设一个指针变量p,先指向第一个结点,当strcmp(p->
name,s)&
&
p!
=NULL时,使p后移一个结点,如果p!
=NULL,输出p所指的结点。
输入要查找的学生的学号s
p=head,使p指向第一结点
当记录的学号不是要找的,或指针不为空时
p=p->
next
p!
=NULL如果指针不为空
显示没有该
输出p所指向的结点学生
删除记录函数STUDENT*delete(STUDENT*h)
这是一个有返回值的有参函数。
形参为“链表头的指针”,在核对密码后。
实现对所要删除学生按学号进行查找。
找到后显示该学生的信息。
按任意键进行删除。
主函数链表的头指针,用一个输出语句printf("
Inputyourpassword:
"
);
提示用户输入密码。
在输入过程中如果需要用到退格。
putchar(8);
putchar('
'
putchar(8);
来达到视觉和功能上的要求。
如果密码错误,则两秒后自动返回主菜单。
正确后输入要删除的学生学号,进行删除。
修改函数STUDENT*Modify(STUDENT*h)
这是一个有参函数,一个是“链表头的指针”修改之后,并返回链表的头指针。
首先向系统申请一块空间,用于存放输入的信息。
程序会根据用户输入的学号。
设一个指针变量p,先指向第一个结点,当strcmp(p->
如果有该学生就修改。
并出现提示信息"
***Modifysuccess!
***"
。
如果没有该学生则出现“***FindoutNo.%sstudent***”提示。
并2秒后返回主菜单。
q=head
原来的链表是空表
是否
2秒后当记录的学号不是要找的,或指针不为空时
返回
主菜单info指向q位置q向后移一个结点
!
strcmp(p->
no,info->
no)
是
否
printf("
Don'
t
forgetsave\n"
)
info->
next=p->
q->
next=info;
从文件读数据函数STUDENT*load()
这是一个不返回值的有参函数,形参为“链表头的指针”,根据输入的文件地址进行读取。
定义两个指针变量p1,p2
输入要打开的记录文件地址infile
文件能打开
开辟一个新单元
指针p1是否为空返回菜单
否是
返回菜单
读入记录
按部分排序函数STUDENT*sort(STUDENT*head)
这是一个有参函数,形参为“链表头的指针”,按学生成绩的平均分高低进行排序,还可以显示名次。
N-S流程图:
temp=head->
next,head->
next=NULL
当temp!
=NULL时
t=temp;
temp=temp->
next;
p1=head;
p2=head;
当t->
average<
p1->
average&
p1!
p2=p1;
p1=p1->
p1=p2
t->
next=p1;
head=t;
p2->
next=t;
p1=head;
当p1!
i++;
p1—>
order=i;
p1=p1—>
输出“排序成功”
主要源程序代码
/*学生成绩管理源程序*/
/***********xuesheng.c***********/
/******头文件(.h)***********/
#include"
stdio.h"
/*I/O函数*/
stdlib.h"
/*其它说明*/
string.h"
/*字符串函数*/
conio.h"
/*屏幕操作函数*/
mem.h"
/*内存操作函数*/
ctype.h"
/*字符操作函数*/
alloc.h"
/*动态地址分配函数*/
#defineN3/*定义常数*/
typedefstructz1/*定义数据结构*/
{
charno[11];
charname[15];
intscore[N];
floatsum;
floataverage;
intorder;
structz1*next;
}STUDENT;
/*以下是函数原型*/
STUDENT*init();
/*初始化函数*/
STUDENT*create();
/*创建链表*/
STUDENT*delete(STUDENT*h);
/*删除记录*/
voidprint(STUDENT*h);
/*显示所有记录*/
voidsearch(STUDENT*h);
/*查找*/
voidsave(STUDENT*h);
/*保存*/
STUDENT*load();
/*读入记录*/
voidcomputer(STUDENT*h);
/*计算总分和均分*/
STUDENT*insert(STUDENT*h);
/*插入记录*/
voidappend();
/*追加记录*/
voidcopy();
/*复制文件*/
STUDENT*sort(STUDENT*h);
/*排序*/
STUDENT*index(STUDENT*h);
/*索引*/
voidtotal(STUDENT*h);
/*分类合计*/
intmenu_select();
/*菜单函数*/
/******主函数开始*******/
main()
inti;
STUDENT*head;
/*链表定义头指针*/
head=init();
/*初始化链表*/
clrscr();
/*清屏*/
for(;
)/*无限循环*/
{
switch(menu_select())/*调用主菜单函数,返回值整数作开关语句的条件*/
{/*值不同,执行的函数不同,break不能省略*/
case0:
head=init();
break;
/*执行初始化*/
case1:
head=create();
case2:
head=delete(head);
case3:
print(head);
/*显示全部记录*/
case4:
search(head);
/*查找记录*/
case5:
save(head);
/*保存文件*/
case6:
head=load();
break;
/*读文件*/
case7:
computer(head);
case8:
head=insert(head);
case9:
copy();
case10:
head=sort(head);
case11:
append();
case12:
head=index(head);
case13:
total(head);
case14:
exit(0);
/*如菜单返回值为14程序结束*/
}
}
/*菜单函数,返回值为整数*/
menu_select()
char*menu[]={"
***************MENU***************"
/*定义菜单字符串数组*/
"
0.initlist"
/*初始化*/
1.Enterlist"
/*输入记录*/
2.Deletearecordfromlist"
/*从表中删除记录*/
3.printlist"
/*显示单链表中所有记录*/
4.Searchrecordonname"
/*按照姓名查找记录*/
5.Savethefile"
/*将单链表中记录保存到文件中*/
6.Loadthefile"
/*从文件中读入记录*/
7.computethescore"
/*计算所有学生的总分和均分*/
8.insertrecordtolist"
/*插入记录到表中*/
9.copythefiletonewfile"
/*复制文件*/
10.sorttomakenewfile"
/*排序*/
11.appendrecordtofile"
/*追加记录到文件中*/
12.indexonnomber"
/*索引*/
13.totalonnomber"
/*分类合计*/
14.Quit"
};
/*退出*/
chars[3];
/*以字符形式保存选择号*/
intc,i;
/*定义整形变量*/
gotoxy(1,25);
/*移动光标*/
printf("
pressanykeyentermenu......\n"
/*压任一键进入主菜单*/
getch();
/*输入任一键*/
/*清屏幕*/
gotoxy(1,1);
textcolor(YELLOW);
/*设置文本显示颜色为黄色*/
textbackground(BLUE);
/*设置背景颜色为蓝色*/
gotoxy(10,2);
putch(0xc9);
/*输出左上角边框┏*/
for(i=1;
44;
putch(0xcd);
/*输出上边框水平线*/
putch(0xbb);
/*输出右上角边框┓*/
for(i=3;
20;
gotoxy(10,i);
putch(0xba);
/*输出左垂直线*/
gotoxy(54,i);
}/*输出右垂直线*/
gotoxy(10,20);
putch(0xc8);
/*输出左上角边框┗*/
/*输出下边框水平线*/
putch(0xbc);
/*输出右下角边框┛*/
window(11,3,53,19);
/*制作显示菜单的窗口,大小根据菜单条数设计*/
for(i=0;
16;
i++)/*输出主菜单数组*/
gotoxy(10,i+1);
cprintf("
%s"
menu[i]);
textbackground(BLACK);
/*设置背景颜色为黑色*/
window(1,1,80,25);
/*恢复原窗口大小*/
gotoxy(10,21);
do{
\nEnteryouchoice(0~14):
/*在菜单窗口外显示提示信息*/
scanf("
s);
/*输入选择项*/
c=atoi(s);
/*将输入的字符串转化为整形数*/
}while(c<
0||c>
14);
/*选择项不在0~14之间重输*/
returnc;
/*返回选择项,主程序根据该数调用相应的函数*/
returnNULL;
/*创建链表*/
ints;
STUDENT*h=NULL,*info;
/*STUDENT指向结构体的指针*/
info=(STUDENT*)malloc(sizeof(STUDENT));
/*申请空间*/
if(!
info)/*如果指针info为空*/
\noutofmemory"
/*输出内存溢出*/
/*返回空指针*/
inputs("
enterno:
info->
no,11);
/*输入学号并校验*/
if(info->
no[0]=='
@'
)break;
/*如果学号首字符为@则结束输入*/
entername:
name,15);
/*输入姓名,并进行校验*/
pleaseinput%dscore\n"
N);
/*提示开始输入成绩*/
s=0;
/*计算每个学生的总分,初值为0*/
N;
i++)/*N门课程循环N次*/
score%d:
i+1);
/*提示输入第几门课程*/
%d"
&
info->
score[i]);
/*输入成绩*/
score[i]>
100||info->
score[i]<
0)/*确保成绩在0~100之间*/
baddata,repeatinput\n"
/*出错提示信息*/
}while(info->
0);
s=s+info->
score[i];
/*累加各门课程成绩*/
sum=s;
/*将总分保存*/
average=(float)s/N;
/*求出平均值*/
order=0;
/*未排序前此值为0*/
next=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 成绩管理系统