班级成绩管理系统Word格式.docx
- 文档编号:19357971
- 上传时间:2023-01-05
- 格式:DOCX
- 页数:18
- 大小:19.80KB
班级成绩管理系统Word格式.docx
《班级成绩管理系统Word格式.docx》由会员分享,可在线阅读,更多相关《班级成绩管理系统Word格式.docx(18页珍藏版)》请在冰豆网上搜索。
(4)将学生成绩保存到文件中。
五.数据结构设计描述:
(一)班级成绩管理系统
主函数
↓
菜单函数
添加显示查找修改删除排序存档读档退出
六.源程序
#include<
string.h>
stdio.h>
stdlib.h>
#include<
graphics.h>
conio.h>
#define_COURSES3//定义科目数
#define_LENsizeof(student)//定义结构体大小
//枚举返回值情况
enumstatus
{
OVERFLOW=-1,//内存(溢出)问题
DONE=0,//成功
NOFOUND=1,//不存在
OPENFAIL=2,//打开(文件)失败
BACK=3//返回
};
//end
//定义学生信息结构体
typedefstructStudentInfo
//数据域
unsignedintnum;
//学号
charname[11];
//姓名
floatscores[_COURSES];
//各科成绩
//指针域
structStudentInfo*next;
//存放下一节点的地址
}student;
student*head=NULL;
//声明链表头结点
student*curr=NULL;
//声明指向当前节点的指针
inttotal=0;
//声明当前节点个数
intinit();
//初始化链表
intadd_stu();
//添加新节点
intshow_all();
//显示所有学生信息
intfind_stu();
//查找指定信息节点
intmodify_stu();
//修改指定信息节点
intremove_stu();
//删除指定信息节点
intsort_list();
//对链表排序
intsave_to_file();
//将所有信息保存至文件
intread_from_file();
//从文件中读取信息
intpicture();
//画分布图
intquit();
//释放所有节点空间
intentering(student*input);
//录入学生信息
voidmenu();
voidshow_stu(student*show,intserial);
//显示指定学生信息
voidstart();
//程序开始界面
voidchange(student*former,student*latter,student*temp);
//交换两个节点的数据域
voidmain(){
inth,flag1,flag2;
charname[20]="
hyw"
password[10]="
;
charperson[20],password1[10];
printf("
\t\t********欢迎进入学生成绩管理系统!
********\n\n"
);
\t\t\t用户登录\n\n"
for(h=0;
h!
=5;
)
{
printf("
\t\t\t\t用户名:
"
gets(person);
flag1=strcmp(person,name);
\t\t\t\t密码:
gets(password1);
flag2=strcmp(password,password1);
if(flag1==0&
&
flag2==0)
{
\t\t\t\t登陆成功!
\n\n"
menu();
break;
}
else
printf("
\t\t\t用户名或密码错误!
printf("
\t\t\t请注意:
您还剩%d次机会!
4-h);
h++;
}
if(h=5)
printf("
对不起,您输入的用户名或密码有误,已被强制退出。
\n"
}
voidmenu()
{
intchoice=0;
init();
while
(1){system("
cls"
//清屏
start();
printf("
请选择:
scanf("
%d"
&
choice);
fflush(stdin);
//清空缓冲区
switch(choice){
case1:
add_stu();
break;
case2:
show_all();
case3:
find_stu();
case4:
modify_stu();
case5:
remove_stu();
case6:
sort_list();
case7:
save_to_file();
case8:
read_from_file();
case9:
picture();
case0:
quit();
exit(0);
default:
system("
pause"
//暂停批文件的处理并显示消息
}
intinit(){
head=(student*)malloc(_LEN);
//为头结点申请空间
if(!
head)
{//如果申请空间失败,返回
returnOVERFLOW;
head->
next=NULL;
//指向下一节点(空)
curr=head->
next;
//当前节点指针指向第一个结点
total=0;
//当前节点个数初始化为0(头结点不计算在内)
returnDONE;
/*功能:
头插法添加新节点,并刷新学生人数*/
intadd_stu(){
student*add=(student*)malloc(_LEN);
//当前节点指针指向第一个节点
\t====当前已存入%d个同学\n"
total);
请输入第%d个学生的信息\n"
total+1);
if(BACK==entering(add)){
free(add);
returnBACK;
next=add;
//头结点指针域指向新建的节点
add->
next=curr;
//新建节点指针域指向第一个节点
curr=add;
//当前节点指向新建的节点
total+=1;
//更新学生总人数
显示所有学生信息*/
intshow_all(){
if(0==total){
printf("
\t====没有可供显示的学生信息!
returnNOFOUND;
\t%4s%12s%12s"
"
序号"
学号"
姓名"
for(intm=0;
m<
_COURSES;
m++){
%7s"
科目"
\t-------------------------------------------------------------\n"
for(inti=1;
i<
=total;
i++){
show_stu(curr,i);
curr=curr->
//当前节点指针后移
查找指定学生信息*/
intfind_stu(){
charstu_name[11];
intflag=1;
请输入要查找的学生姓名:
%s"
stu_name);
//指向第一个节点
while(curr!
=NULL){
if(strcmp(stu_name,curr->
name)==0){
printf("
for(intm=0;
printf("
}
show_stu(curr,flag);
returnDONE;
++flag;
\t====没有找到%s!
请仔细核对姓名再查找\n"
returnNOFOUND;
修改指定学生的所有信息*/
intmodify_stu(){
请输入要修改的学生的姓名:
entering(curr);
\t====成功修改了%s的所有信息!
请仔细核对姓名\n"
删除指定学生*/
intremove_stu(){
student*pre=head;
请输入要删除的学生的姓名:
name)==0)
pre->
next=curr->
free(curr);
--total;
\t====已成功删除\"
%s\"
pre=pre->
对所有学生排序*/
intsort_list(){
student*temp=(student*)malloc(_LEN);
student*curr_i=head->
student*curr_j=NULL;
charchoice='
0'
\t\t1----按学号排序.\t2----按姓名排序.\n"
\t\t3----按科目排序.\t0----退出排序.\n"
%c"
case'
1'
:
while(curr_i->
next!
curr_j=curr_i->
while(curr_j!
if(curr_i->
num>
curr_j->
num){
change(curr_i,curr_j,temp);
}
curr_j=curr_j->
curr_i=curr_i->
\t====排序成功!
break;
2'
if(strcmp(curr_i->
name,curr_j->
name)>
0){
3'
scores[0]<
scores[0]){
free(temp);
\t====输入有误!
free(temp);
保存数据到文件*/
intsave_to_file(){
curr=head->
if(total==0){
\t====目前还没有任何信息,不用保存!
FILE*fp;
if((fp=fopen("
record.dat"
wb"
))==NULL){
\t====文件打开失败!
returnOPENFAIL;
//将数据成块写入文件
fwrite((char*)curr,_LEN,1,fp);
curr=curr->
fclose(fp);
\t====信息已成功保存至文件\"
record.dat\"
文件中\n"
从文件中读取数据*/
intread_from_file()
charjudge='
y'
r"
文件不存在或者打开失败!
\t====读取文件会覆盖当前信息!
是否确定载入文件?
(y/n):
judge);
if(judge=='
n'
||judge=='
N'
){
//释放以前所有信息的空间
//重新初始化链表
curr=head;
//当前节点指针指向头结点
student*add=(student*)malloc(_LEN);
//申请空间存放读取的信息
while(fread((char*)add,_LEN,1,fp)){//由于存储的信息是最新的信息在前,所以读取的时候将其添加在链表尾
add->
next=curr->
curr->
next=add;
curr=add;
add=(student*)malloc(_LEN);
++total;
\t====文件载入成功!
当前已有%d个学生。
释放内存*/
intquit(){
curr=head->
student*temp=curr;
while(curr!
temp=curr->
free(curr);
curr=temp;
curr=NULL;
temp=NULL;
free(head);
//释放头节点
录入一个学生的全部信息*/
intentering(student*input){
\n请输入学生的学号(输入0退出添加):
input->
num);
if(0==input->
请输入学生的姓名(五个汉字以内):
name);
请输入%d门科目的成绩(用空格隔开):
_COURSES);
for(inti=0;
scanf("
%f"
scores[i]);
显示指定学生的所有信息*/
voidshow_stu(student*show,intserial){
\t%4d%12d%12s"
serial,show->
num,show->
%7.1f"
show->
根据权限进入不同的界面*/
voidstart(){
\t\t\t欢迎使用学生成绩管理系统\n"
\t*************************************************************\n"
\t|\t1----添加学生.\t2----显示信息.|\n"
\t|\t3----查找学生.\t4----修改信息.|\n"
\t|\t5----删除学生.\t6----学生排序.|\n"
\t|\t7----信息存档.\t8----读取存档.|\n"
\t|\t9----成绩统计.\t0----退出.|\n"
voidchange(student*former,student*latter,student*temp){
*temp=*former;
strcpy(former->
name,latter->
strcpy(latter->
name,temp->
former->
num=latter->
num;
latter->
num=temp->
former->
scores[i]=latter->
scores[i];
latter->
scores[i]=temp->
}
voidbing(doublea,doubleb,intc){
initgraph(640,480);
doublex,y;
chars[]="
A:
100~80红;
B:
80~60蓝;
C:
60~0黑
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 班级 成绩管理系统