学生成绩管理系统.docx

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

学生成绩管理系统.docx

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

学生成绩管理系统.docx

学生成绩管理系统

学生管理系统

 ———学生成绩管理系统

学院计算机科学与技术

专业计算机科学与技术

学号110341202

学生姓名陈格

指导教师姓名沈中林

提目难度综合题

2013年6月1日

 

一、题目

1)实现对学生信息的查找、添加、删除、修改、浏览、保存、从文件读取功能。

2)使用结构体对学生信息的存储。

3)使用哈希表实现对学生信息的查找、添加、删除、修改、浏览等操作。

4)熟悉使用哈希法,建立哈希表,实现对姓名进行散列法查找。

5)使用文件完成数据的存储与读取,要求每次运行某个模块时将数据读入结构体中,并提供保存选项,将结构体中的数据保存在文件中。

二、问题分析及求解思路

(1)数据结构

学生成绩信息:

typedefstructstudentscore

{charname[10];//定义姓名的字符数组

charnum[20];//定义学号的字符数组

structsubject

{charsubname[20];//定义学科名的字符数组

floatscore;//保存学生各科成绩

}sub[5];//共五门课

doublesum;//总分

structstudentscore*next;

}STUCORE;

(2)本系统涉及的知识点

结构体、数组、循环、函数、指针、链表、文件操作。

(3)原理

除留余数法:

关键字被某个不大于哈希表长m的数P除后所得余数为哈希地址。

H(key)=keyMODP(P<=m)

随机探测再散列法:

选择一个随机函数,取关键字的随机函数值为它的哈希地址,即

Hi=random(key)MODP(P<=m)

其中random为随机函数。

通常用于关键字长度不等时采用此法。

(4)功能要求功能模块

1、建立学生信息,每个学生的信息包括:

学号、姓名、性别、班级、学院

2、用链表的形式对学生信息分别进行查找、添加、删除、修改

3、结果保存在磁盘上

(5)功能模块

 

 

 

 

(4)算法功能描述

①总体功能说明:

本系统可以做到对1.学生信息:

学号、姓名、性别、学院、班级。

2.学生成绩信息:

学号、姓名、一名学生五门不同学科的学科名及该科成绩。

分别进行添加、修改、查找、删除、保存、载入功能。

②学生成绩信息管理功能说明:

可以添加学生学号、姓名、及对一名学生五门不同学科的学科名及该科成绩。

并可以通过对输入的学生成绩信息进行修改、删除、保存、载入功能并通过学号和姓名两种方式查找,并且对同名的学生也可以进行区分。

并且会保持学好的一致性,保证任意两名学生不会出现学号相重复的情况。

三、主要功能模块流程图(按姓名查找信息的流程图)

while(p!

=NULL)

0

1

按姓名查找流程图

四、主要算法

 

学生成绩信息管理中各模块的功能说明程序代码设计

一:

结构体:

typedefstructstudentscore

{charname[10];

charnum[20];

structsubject

{charsubname[20];

floatscore;

}sub[5];//保存学生各科成绩

doublesum;//总分

structstudentscore*next;

}STUCORE;

二:

添加学生成绩信息函数:

(voidadd_score())

1)函数原形:

voidadd_score()

2)功能:

采用动态内存分配malloc函数和链表结构。

利用dowhile、while循环结构strcpy函数依次输入学生学号、姓名、及对一名学生五门不同学科的学科名及该科成绩。

将信息保存在内存中建立的链表里。

3)变量及类型:

STUCORE*stu,*p;定义结构体指针

chark;用来接收输入的(y/n)以便通过dowhile判断是否继续添加信息

intflag;定义一个整型变量来判断所添加的学生学号是否已经存在文件中,保证学号唯一性

p=head_2;将结构体下定义的头指针head_2赋给p

4)说明:

执行完输入函数后,会在键盘缓冲区中保存回车键,后面再对字符型变量赋值时,会将缓冲区中的回车键当成数据存入变量中,所以要在某些输入语句后面加getchar()函数。

并在函数调用结束时利用system("cls")执行清屏操作。

添加完成后需要去往文件操作保存。

voidadd_score()//添加学生成绩信息

{STUCORE*stu,*p;chark;p=head_2;intflag=0;

do

{stu=(STUCORE*)malloc(sizeof(STUCORE));

printf("输入学生的成绩信息:

\n");

while(flag==0){printf("请输入学生学号:

");scanf("%s",no);flag=Judge(no);}

strcpy(stu->num,no);printf("请输入学生姓名:

");scanf("%s",stu->name);

printf("请输入第一门课学科名:

");scanf("%s",stu->sub[0].subname);

printf("请输入该课成绩:

");scanf("%f",&stu->sub[0].score);

printf("请输入第二门课学科名:

");scanf("%s",stu->sub[1].subname);

printf("请输入该课成绩:

");scanf("%f",&stu->sub[1].score);

printf("请输入第三门课学科名:

");scanf("%s",stu->sub[2].subname);

printf("请输入该课成绩:

");scanf("%f",&stu->sub[2].score);

printf("请输入第四门课学科名:

");scanf("%s",stu->sub[3].subname);

printf("请输入该课成绩:

");scanf("%f",&stu->sub[3].score);

printf("请输入第五门课学科名:

");scanf("%s",stu->sub[4].subname);

printf("请输入该课成绩:

");scanf("%f",&stu->sub[4].score);

stu->sum=stu->sub[1].score+stu->sub[2].score+stu->sub[3].score+stu->sub[4].score+stu->sub[0].score;

getchar();printf("\t\t输入学生信息完成。

\n");

while(p->next!

=NULL)p=p->next;

p->next=stu;p=stu;p->next=NULL;

printf("\n添加完成后请去往文件管理保存!

\n\n是否继续添加学生信息?

(y/n):

\n");

}while((k=getchar())=='y');

getchar();system("cls");}

三:

删除学生成绩信息函数(voiddel_score())

1)函数原形:

voiddel_score()

2)功能:

利用strcmp函数、dowhile、while循环结构通过学号找到要删除的学生并利用链表执行删除操作。

将信息保存在内存中建立的链表里。

3)变量及类型:

STUCORE*p,*q;定义结构体指针

charno[10];定义输入的待比较变量

chark,ch;用来接收输入的(y/n)以便通过dowhile判断是否删除信息

p=head_2;将结构体下定义的头指针head_2赋给p

4)说明:

执行完删除函数后,会在键盘缓冲区中保存回车键,后面再对字符型变量赋值时,会将缓冲区中的回车键当成数据存入变量中,所以要在某些输入语句后面加getchar()函数。

并在函数调用结束时利用system("cls")执行清屏操作。

删除完成后需要去往文件操作保存。

voiddel_score()//删除学生成绩信息

{STUCORE*p,*q;charno[10];chark,ch;

Do

{p=head_2;printf("\t\t删除学生的详细资料\n\n\n");

printf("请输入要删除学生的学号:

");scanf("%s",no);

while(strcmp(p->num,no)!

=0&&p->next!

=NULL){q=p;p=p->next;}

if(strcmp((p->num),no)==0)

{printf("要删除的学生成绩信息:

");

printf("学号:

%s\n",p->num);printf("姓名:

%s\n",p->name);

printf("%s成绩:

%f\n",p->sub[0].subname,p->sub[0].score);

printf("%s成绩:

%f\n",p->sub[1].subname,p->sub[1].score);

printf("%s成绩:

%f\n",p->sub[2].subname,p->sub[2].score);

printf("%s成绩:

%f\n",p->sub[3].subname,p->sub[3].score);

printf("%s成绩:

%f\n",p->sub[4].subname,p->sub[4].score);

printf("总分:

%lf\n",p->sum);getchar();

printf("\n确定删除吗?

y/n?

\n\n");ch=getchar();

if(ch=='y'){q->next=p->next;printf("\n\t\t\t已删除该学生\n\n");}}

elseprintf("\n\t\t\t没有该学生\n\n");getchar();printf("\n删除完成后请去往文件管理保存!

\n\n是否继续删除其它学生信息?

(y/n?

):

\n");k=getchar();}while(k=='y');

getchar();system("cls");}

四:

修改学生成绩信息函数(voidmodify_score())

1)函数原形:

voidmodify_score()

2)功能:

利用strcmp函数、dowhile、while循环结构通过学号找到要修改的学生并利用链表执行修改操作。

并将修改后的信息保存在内存中建立的链表里。

3)变量及类型:

STUCORE*p;定义结构体指针

charno[10];定义输入的待比较变量

chark;用来接收输入的(y/n)以便通过dowhile判断是否继续修改信息

p=head_2;将结构体下定义的头指针head_2赋给p

4)说明:

执行完修改函数后,会在键盘缓冲区中保存回车键,后面再对字符型变量赋值时,会将缓冲区中的回车键当成数据存入变量中,所以要在某些输入语句后面加getchar()函数。

并在函数调用结束时利用system("cls")执行清屏操作。

修改完成后需要去往文件操作保存。

voidmodify_score()//修改学生成绩信息

{system("cls");STUCORE*p;charno[30];chark;

do

{p=head_2;printf("\t\t修改学生的详细资料\n");

printf("输入学生学号:

");scanf("%s",no);

while(strcmp(p->num,no)!

=0&&p->next!

=NULL){p=p->next;}

if(strcmp((p->num),no)==0)

{printf("要修改的学生的详细资料:

\n");

printf("学号:

%s\n",p->num);printf("姓名:

%s\n",p->name);

printf("%s成绩:

%f\n",p->sub[0].subname,p->sub[0].score);

printf("%s成绩:

%f\n",p->sub[1].subname,p->sub[1].score);

printf("%s成绩:

%f\n",p->sub[2].subname,p->sub[2].score);

printf("%s成绩:

%f\n",p->sub[3].subname,p->sub[3].score);

printf("%s成绩:

%f\n",p->sub[4].subname,p->sub[4].score);

printf("总分:

%lf\n",p->sum);

printf("\n\t\t********根据提示输入修改后的信息**********\n\n");

printf("输入新的学生的成绩信息:

\n");

printf("请输入新的学生学号:

");scanf("%s",p->num);

printf("请输入新的学生姓名:

");scanf("%s",p->name);

printf("请输入第一门课学科名:

");scanf("%s",stu->sub[0].subname);

printf("请输入该课成绩:

");scanf("%f",&stu->sub[0].score);

printf("请输入第二门课学科名:

");scanf("%s",stu->sub[1].subname);

printf("请输入该课成绩:

");scanf("%f",&stu->sub[1].score);

printf("请输入第三门课学科名:

");scanf("%s",stu->sub[2].subname);

printf("请输入该课成绩:

");scanf("%f",&stu->sub[2].score);

printf("请输入第四门课学科名:

");scanf("%s",stu->sub[3].subname);

printf("请输入该课成绩:

");scanf("%f",&stu->sub[3].score);

printf("请输入第五门课学科名:

");scanf("%s",stu->sub[4].subname);

printf("请输入该课成绩:

");scanf("%f",&stu->sub[4].score);

stu->sum=stu->sub[1].score+stu->sub[2].score+stu->sub[3].score+stu->sub[4].score+stu->sub[0].score;}

else

printf("\t\t没有此学生信息!

\n\n");

getchar();printf("\n修改完成后请去往文件管理保存!

\n\n是否继修改学生信息?

(y/n):

\n");k=getchar();}while(k=='y');

getchar();system("cls");}

五:

按学号查找学生成绩信息函数(voidsearch_num())

1)函数原形:

voidsearch_num()

2)功能:

利用strcmp函数、dowhile、while循环结构通过学号找到要查找的学生并将该学生成绩信息显示出来。

3)变量及类型:

STUCORE*p;定义结构体指针

charno[10];定义输入的待比较变量

chark;用来接收输入的(y/n)以便通过dowhile判断是否继续利用学号查询信息

intflag;定义一个整型变量来判断所查找的学生是否存在文件中

p=head_2;将结构体下定义的头指针head_2赋给p

4)说明:

执行完查询函数后,会在键盘缓冲区中保存回车键,后面再对字符型变量赋值时,会将缓冲区中的回车键当成数据存入变量中,所以要在某些输入语句后面加getchar()函数。

并在函数调用结束时利用system("cls")执行清屏操作。

voidsearch_num()//按学号查找学生成绩信息

{STUCORE*p;charno[10];chark;intflag;

do

{p=head_2;flag=0;printf("请输入要查找学生的学号:

");scanf("%s",no);

while(p!

=NULL)

if(strcmp(p->num,no)==0)

{printf("要查询的学生详细资料:

\n");

printf("学号:

%s\n",p->num);printf("姓名:

%s\n",p->name);

printf("%s成绩:

%f\n",p->sub[0].subname,p->sub[0].score);

printf("%s成绩:

%f\n",p->sub[1].subname,p->sub[1].score);

printf("%s成绩:

%f\n",p->sub[2].subname,p->sub[2].score);

printf("%s成绩:

%f\n",p->sub[3].subname,p->sub[3].score);

printf("%s成绩:

%f\n",p->sub[4].subname,p->sub[4].score);

printf("总分:

%lf\n",p->sum);p=p->next;flag=1;}

else

p=p->next;

if(flag==0)printf("\n\t\t\t没有该学生\n\n");getchar();printf("\n是否继续查找其它学生信息?

y/n?

\n");k=getchar();}while(k=='y');

getchar();printf("\n\t\t查看完毕!

按任意键返回");getchar();system("cls");}

六:

按姓名查找学生成绩函数(voidsearch_name())

1)函数原形:

voidsearch_name()

2)功能:

利用strcmp函数、dowhile、while循环结构通过姓名找到要查找的学生并将该学生成绩信息显示出来。

(包括同名的学生)

3)变量及类型:

STUCORE*p;定义结构体指针

charno[10];定义输入的待比较变量

chark;用来接收输入的(y/n)以便通过dowhile判断是否继续利用姓名查询信息

intflag;定义一个整型变量来判断所查找的学生是否存在文件中

p=head_2;将结构体下定义的头指针head_2赋给p

4)说明:

执行完查询函数后,会在键盘缓冲区中保存回车键,后面再对字符型变量赋值时,会将缓冲区中的回车键当成数据存入变量中,所以要在某些输入语句后面加getchar()函数。

并在函数调用结束时利用system("cls")执行清屏操作。

voidsearch_name()//按姓名查找学生成绩

{STUCORE*p;charno[10];chark;intflag;

do

{p=head_2;flag=0;printf("请输入要查找学生的姓名:

");scanf("%s",no);

while(p!

=NULL)

if(strcmp(p->name,no)==0)

{printf("要查询的学生详细资料:

\n");

printf("学号:

%s\n",p->num);printf("姓名:

%s\n",p->name);

printf("%s成绩:

%f\n",p->sub[0].subname,p->sub[0].score);

printf("%s成绩:

%f\n",p->sub[1].subname,p->sub[1].score);

printf("%s成绩:

%f\n",p->sub[2].subname,p->sub[2].score);

printf("%s成绩:

%f\n",p->sub[3].subname,p->sub[3].score);

printf("%s成绩:

%f\n",p->sub[4].subname,p->sub[4].score);

printf("总分:

%lf\n",p->sum);p=p->next;flag=1;}

else

p=p->next;

if(flag==0)printf("\n\t\t\t没有该学生\n\n");getchar();printf("\n是否继续查找其它学生信息?

y/n?

\n");k=getchar();}while(k=='y');

getchar();printf("\n\t\t查看完毕!

按任意键返回");getchar();system("cls");}

七:

查找学生成绩信息函数

voidsearch_score()//查找学生成绩信息

{system("cls");inta;

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

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

printf("\t\t\t1:

按学号查找。

\n");printf("\t\t\t2:

按姓名查找。

\n");printf("\t\t\t3:

退出。

\n");

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

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

printf("\n\t\t输入一个有效的数字,选择你要做的操作:

\n");scanf("%d",&a);

switch(a)

{case1:

search_num();break;case2:

search_name();break;case3:

score();break;

default:

printf("\t\t\t错误的菜单选项\n\n");break;}}

八:

学生成绩管理函数

voidscore()//学生成绩管理

{system("cls");inta;

printf("\t\t*************学生管理系统**************\n");

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

printf("\t\t\t1:

查找成绩信息。

\n");printf("\t\t\t2:

添加成绩信息。

\n");

printf("\t\t\t3:

删除成绩信息。

\n");printf("\t\t\t4:

修改成绩信息。

\n");

printf("\t\t\t5:

返回。

\n");

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

printf("\t\t**************************************\n");printf("\n\t\t输入一个有效的数字,选择你要做的操作:

\n");scanf("%d

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

当前位置:首页 > 外语学习 > 其它语言学习

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

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