当前位置:首页 » 考试成绩 » 学生成绩管理系统算法思想

学生成绩管理系统算法思想

发布时间: 2021-01-23 17:56:41

1. 学生成绩管理系统程序实现思路

类设计:1、超类:Person,子类:Student、Teacher、Administrator。
2、Course类(课程)
数据库:学生与课程是多对专多关系,教师与课程的关属系看你的需要来设计。
表现层:windows程序或网页B/S的
功能:1、学生只能查询成绩。2、教师能输入学生成绩和查询。3、管理员能设置课程信息。

2. 学生成绩管理系统

学生成绩管理系统C代码
/ *头文件* /
#包括
包括
#包括 / *其他指令* /
包括中/ *字符串函数* /
/ *内存操作函数* /
/ *字符处理函数* /
包括 / *动态地址分配函数* /
定义:LEN大小(学生)
typedef结构中,学??生/ *定义结构数组,用于缓存数据* /
{字符数[6];
字符名称[5];
得分[3];
int总和;
>浮动平均水平;
诠释订单
结构STU *下;
}的学生;

/ *函数原型* /
学生的init( );/ /初始化函数* /
诠释MENU_SELECT的(); / *菜单函数* /
学生的create(); / *创建的链表* /
无效打印(学生*头); / *显示所有记录* /
无效搜索(学生*头); / *找到记录* /
学生删除(STUDENT *头); / *删除记录* / />学生排序(学生头); / *排序* /
学生(学生*头,新的学生*); *插入/ *插入记录* /
无效保存(的学生头); / *保存文件* /
学生的load(); / *读取文件* /

/ *主函数接口* /
主()
{的学生*头,新的;
头的init(); / *初始化链表头的值是NULL * /
(;) / *循环无限* /
{开关(menu??_select())
{
案例1:头= create()方法的突破;
案例2:打印(头);休息;
案例3:搜索(头);突破;
情况下,4头=删除(头);突破;
情况下5头排序(头);突破;
案例6:头插入(头,与新的);打破; / *新的返回地址* /
案例7:保存(头);
案例8:头=负载(
案例9:退出);突破;(0)/ *如果菜单,返回值是年底的9个项目* /
}
}
}

/ *初始化函数* /
学生的init()
{
返回NULL; / *返回一个空指针* /
}
a>
/ *菜单选择功能* /
menu_select

{N;
结构日期d / *定义的时间结构* / /> GETDATE(&D)/ *读取系统日期,并把它在结构上D * /
printf的(“按任意键进入菜单......”); / *按任意键进入主菜单* /
的getch(); / *读取从键盘输入一个字符,但不显示在屏幕上* /
clrscr(); / *清屏* / /> printf(“请********************************************* *********************************** \ n“);
printf(”请\ T \吨的\ n“);
printf(”请\ n \ t \ t学生成绩管理系统\ n“);
printf(”请************ ************************* MENU ************************ *************** \ n“);
printf的(”\ t \ t \ T1输入记录\ n“); / *输入学生记录* / BR /> printf的(“\ t \ t \ T2打印记录\ n”); / *显示* /
printf的(“\ t \ t \ T3的搜索记录名称\ n”); / * * /
printf的(“\ t \ t \ T4。删除记录\ n”); / *删除* /
printf的(“\ t \ t \ T5。排序,使新的文件\ n“); / *排序* / <br /输出(”\ t \ t \ T6插入记录到列表\ n“); / *插入* /
printf的(”\ t \ t \ T7保存的文件\ n“); / *保存* /
printf的(”\ t \ t \ T8负载的文件\ n“); / *读* /
printf的(”\ t \ T \ T9退出\ n“); / *退出* /
printf的(”\ n \ t \ t胡嘿黉\ n“);
printf的(”****** ************************************************** ************************ \ n“);
printf的(”\ t \ t \ t \ t%d \ \%d的\ \%e\“,d.da_year,d.da_mon,d.da_day); / *显示当前系统日期* /
做{
printf的(”\ n \ t \ t \拉幅机的选择(1?9):“);
scanf的(”%d“,&N);
}(N 9)/ *如果该选项是不减肥9 * /
回报率(N); / *返回选项的数量,主要功能调用相应的函数* /

}
/ *输入函数* /
学生创??建()
{I,S
学生头= NULL,* P / *定义函数这个函数返回一个指针表头指针* /
Clrscr();
(;)
{P =(学生)的malloc(LEN); / *打开了一个新的单元* / BR />(P)/ *如果指针p是空* /
{printf的(“\ Nout的记忆。”); / *输出内存溢出* /
回报(头); / *返回头指针,下同* /
}
printf的(“请输入NUM(0:列表结束):”);
scanf的(“%s”,P-> NUM);
(P->数[0] == '0')打破; / *如果第一个字符的学生数0输入* /
printf(“请结束输入姓名:“);
scanf的(”%s“,P->名称);
printf(”请输入%D分数\ n“); / *迅速启动分型结果* /

= 0; / *计算每个学生的总成绩,初始值为0 * /
(i = 0; I <3; i + +)/ * 3个疗程周期的3倍* /
{
做{
printf的(“得分%D:”,i +1);
scanf的(“%d”的,普 - >得分[I]);
(P->得分[I] 得分[I]> 100)/ *确保得分在0至100之间* /
printf的(“数据错误,请重新输入\ n”);
}而(P>得分[I] [I]> 100分);
= S + P->得分[I] / *堆积门的成绩* /
}
P->总和= S / *节省的总成绩* /
对平均= (浮)/ 3; / *首先转换类型转换s转换为float类型,然后寻求的平均* /
P->订单= 0; / *在此之前的值排序为0 * / BR /> P> =头; / *头节点作为一个新的输入节点的后继节点* /
头= P / *新的输入节点作为新的头节点* /
}
a>回报(头);
}

/ *显示所有记录函数* / >无效打印(学生头)
{i = 0; / *统计记录数* /
学生* P / *移动指针* /

Clrscr();
P =头; / *初始的头指针* / /> printf(“请\ n ************************************学生****** ****************************** \ n“);
printf(”请---- -------------------------------------------------- --------------------- \ n“); <br /输出(”|记录|编号|名称| SC1 SC2 SC3 |森|大道|订单| \ n“);
printf的(”------------------------------------ ------------------------------------------- \ n“); ...... />而(p! = NULL)
{
+ +;
printf的(“|%3D |%4 |%|%-4S 3D | 3D | 3D | %的3d |%4.2f |%-5d的| \“,
,对 - >数,对 - >名称,对 - >分数[0],对 - >分数[1],对 - > [2分],P->总之,对平均,P->订单);
P = P->下;
}
printf的(“------ -------------------------------------------------- ----------------------- \ n“);
printf的(”*************** *********************** END ************************** ************ \ n“);
}

/ *查找录音功能* /
无效搜索(学生*头) BR /> {STUDENT * p; / *移动指针* /
个char [5]; / *商店的名称的字符数组* /
Clrscr();
scanf函数
printf的(“请输入您的名字进行搜索。\ n”);(%S“,S);
P =头; / *分配的头指针P * /
而(STRCMP(P->名称,s)&& P = NULL)/ *的名称的记录时不看,或指针的时空* /
P = P-> / *移动指针指向下一个节点* /
(p! = NULL)/ *如果指针不为空* /
{printf(“请\ n ******** ***************************** FOUND ******************** **************** \ n“);
printf(”请---------------------- -------------------------------------------------- ------- \ n“);
printf的(”|编号|名称| SC1 SC2 | SC3 |森|大道|订购| \ n“);
printf的(” - -------------------------------------------------- --------------------------- \ n“);
printf的(”| 4 |%4S |%3D |%三维|%的3d |%的3d |%4.2f |%-5d的| \ N“,
对 - >数,对 - >名称,对 - >分数[0],对 - >分数[1],对 - >分数[2],对 - >总和,对 - >平均,对 - >顺序);
printf(“请------------------- -------------------------------------------------- --------- \ n“);
printf的(”***************************** ********** END ************************************** \ N“);
}
其他
printf的(”\ n该网页的没有NUM%的学生在名单上。\ n“); / *学生* /
}

/ *删除记录的函数* /
学生*头*删除(学生)

学生{N; * P1 * P2 / * P1是找到要删除一个节点的指针,P2及其前体的指针* /
字符c的s [6] / [6]用来存储学生数,c是用于输入字母* / </ clrscr();
printf的(“请输入删除的民:”);
scanf的(“%s”);
P1 = P2 =头; / * P1和P2富最初的头指针* /
(STRCMP(P1-NUM)&& P1 = NULL)/ *当记录数的学校不看,或指针不为空* / /> {P2 = P1 / * P1指针的值分配给P2 P1前体指针* /
P1 = P1->; / *点p1指针到下一条记录* /
} BR />(STRCMP(P1->民)== 0)/ *学生ID * /
{printf的(“***************** ********************* FOUND **************************** ******** \ n“);
printf(”请------------------------------ ------------------------------------------------- \ N“);
printf的(”|编号|名称| SC1 SC2 | SC3 |森|大道|在线订单| \ n“);
printf的(”--------- -------------------------------------------------- -------------------- \ n“);
printf的(”| 4 |%4S |%3D | 3D | 3D | 3D |%4.2f%5D | \ n“,
P1->民,P1->名称,P1->得分[0],P1 - > [1分],P1->得分[2] ,P1->总之,P1->平均,P1->订单);
printf的(“-------------------------- -------------------------------------------------- --- \ n“);
printf(”请*********************************** **** END ************************************** \ n“); ...... /> printf的(“你确定要删除的学生Y / N?”); / *提示你是否要删除,输入y删除n退出* /
(;)
/> {scanf函数(“%C”,&C);
(C =='N'| | C =='N'); / *如果你不删除,然后跳出循环* /
(C =='Y'| | C =='Y')
{
(P1 ==头)/ * P1 ==头,被删除节点是第一个节点* /
头= P1->下; / *第二个节点的地址给头* /
其他
P2->下一个= P1-> /否则,请单击节点地址被分配到前一个节点的地址* /
N = N-1; <br /输出(“\ nNum%的学生已被删除。\ n”,S); /> printf的(“不要忘记保存。\ n”); / *循环后已被删除* /
}
}
} 其他
printf的(“\ n该网页的没有NUM%的学生在名单上。\ n”); /,找不到节点* /
回报(头);
}

/ *排序函数* /
学生排序(学生头)
{INT I = 0; / *保存排名* /
学生* P1, * P2 * T,*温度; / *定义一个临时指针* /
温度=头下; / *原来的下一个节点的指针表头的头指针* /
头> = NULL; / *头节点的新表的第一个节点* /
(temp! = NULL)/ *当原表不为空,进行排??序* /
{
T =温度; / *取前表节点* /
TEMP =温度 - >; / *原来的头节点的指针向后* /
P1 =头/头*移动指针P1指针从头开始* /
P2 =头; / *移动指针P2为的P1前驱体的头指针的初始值* /
而(平均平均&& P1 = NULL)/ *成绩平均比??较* /
{
P2 = P1 / *点值小进行排序,新表指针落后* /
P1 = P1->下;
}
(P1 == P2)/ * P1 == P2,点值进行排序,应该排在第一个* / BR /> {
T-> = P1;进行排序的继任者的p * /
头= T / * / *新的头节点进行排序点* /
}
的else / *进行排序点应插入在中间的位置p2和p1的,例如为p的空尾之间* /
{
叔 - >下一个= p1的; / * t的后继是p1 * /
P2-> = T / * P2的继任吨* /
}
}
P1 =头; / *排序头指针被分配到P1准备填写的排名* /
(p1! = NULL)/ * p1是不是空的,下面的操作* /
{
+ +; / *节点数量* /
P1->订单; / *分配的节点数量的排名* /
P1 = P1->; / *指针后移* /
}
printf的(“的排序是SUCESSFUL。\ n”排序;} / *成功* /
回报(头);
}

/ *插入记录功能* /
学生插入(学生头STUDENT *新)
{STUDENT * P0,P1,P2;
整数N,SUM1;
P1 =头/ * P1点的第一个节点* /
P0 =新/ * P0点要插入节点* /
printf的(“\ n请输入一个新的记录。\ n”) / *提示信息记录* /
printf的(“请输入数量:”);
scanf函数(“%s”的新数);
printf(“输入的名称:“);
scanf的(”%s“的新名);
printf的(”请输入%d的分数。\ n“);
SUM1 = 0; / *保存新的得分纪录,初始值为0 * /
为(i = 0; I <3; i + +)
{
做{
printf的(“得分%D:“,i +1);
scanf的(”%d“的,与新>得分[]);
(新 - >得分[I]> 100 | |新 - >得分[I] <0)
printf(“请数据错误,请重新输入。\ n”);
}而(新 - >评分[我]> 100 | |新 - >评分[I] <0);
SUM1 = SUM1 +新 - >得分[I] / *累计门成绩* /
}
新 - >金额= SUM1; /存款总额新的记录* /
新的平均=()SUM1 / 3;
新订单= 0;
(头== NULL)/ *原链表为空表* /
{头= P0,P0-> = NULL;} / *节点指出P0口作为头节点* /
其他
{((P0->平均平均)&&(P1->!= NULL))
{P2 = P1 / P2点只是P1结点* /
P1 = P1->; / * P1落后节点* /
}
(P0->平均> = P1->平均)
{如果(头== P1)头= P0 / *插入到原来的第一个节点* / />其他P2-> = P0 / *在插入节点* /
P0-> = P1;}
其他
{P1->下一个= P0到P2点P0-> = NULL;} / *上的最后一个节点* /
}
N = N +1; / *节点数目加1 * /
头排序(头); / *调用sort函数的学生的成绩重新排序* /
printf的(“,已插入\ nStudent%s的。\ n”,新名);
printf的(“不要忘记保存新的文件。\ n“);
回报(头);
}

/ *将数据保存到文件函数* /
无效保存(学生*头)
{FILE * FP; / *定义点文件指针* /
STUDENT * p; / *定义移动指针* /
字符,OUTFILE [10];
输出(“请输入OUTFILE名称,例如C:\ \成绩\ n”);
scanf的(“%s”,OUTFILE);
((FP =打开(OUTFILE,“WB”) )== NULL)/ *为输出打开一个二进制文件,只写* /
{
printf的(“无法打开文件\ n”);
回报; / *如果您无法打开返回菜单* /
}
printf的(“\ nSaving的文件... \ n”);
P =头; / *移动指针从头开始* /
而(p! = NULL)/ * p不为空* /
{
FWRITE(P,LEN,1,FP); / *写的指针记录* /
P = P->下; / *指针后移* /
}
FCLOSE(FP); / *关闭文件* /
printf的(“将文件保存成功!\ n“);
}

/ *从文件功能* /
学生中读取数据负载()
{STUDENT * P1 * P2 *头= NULL; / *定义记录指针变量* /
FILE * FP / *定义指向文件的指针* /
字符的infile [10];
printf的(“输入INFILE名称,例如c:\ \成绩\ n“);
scanf的(”%s“,infile中);
((FP =的FOPEN(INFILE,”包“))= = NULL)/ *打开一个二进制文件只读* /
{
printf的(“无法打开文件\ n”);
回报(头);
}
printf的(“\ n载入的文件!\ n”);
P1 =(学生)的malloc(LEN); / *开辟了一条新的单位* /
(P1 )
{
printf的(“内存不足!\ n”);
回报(头);
}
头= P1 / *适用于空间,作为头指针* /

同时(!的feof(FP))/ *循环读取数据,直到年底结束的文件* / {

(FREAD(P1,LEN,1,FP)= 1)打破; / *如果你不读出的数据的循环* /
P1-> =(学生)的malloc(LEN); / *下一个结点打开空间* /
(P1->)
{
printf的(“内存不足!\ n”);
回报(头); BR />}
P2 = P1 / P2点只是P1结点* /
P1 = P1->; / *指针回新读入数据链当前的表* /
}
P2-> = NULL; / *最后一个节点的继任指针为空* /
FCLOSE(FP);
输出( “你已经成功从文件中读取数据!\ n”);
回报(头);
}

3. java学生成绩管理系统中算法的问题

定义2维数组不就完了
如果有3个人的成绩
String [][]student=new String[3][2];
前一个元素为姓名,后一个元素为成绩
String []temp=new String[2];
排序的时候两个元素一起排就完了呗,不过判断条件只取决于成绩元素
例如
for(int i=2;i>0;i--) //以冒泡为例好了,举例子么,数小点吧
{
for(int j=0;j<i;j++)
{
flag=false;
if(a[j][1]>a[j+1][1]) //按顺序依次比较大小,只比较右面的成绩元素
{
flag=true; //这里说明比较还在继续
temp[1]=a[j][1]; //存放成绩
temp[0]=a[j][0]; //存放姓名
a[j][1]=a[j+1][1];
a[j][0]=a[j+1][0];
a[j+1][0]=temp[0];
a[j+1][1]=temp[1];//每次互换都是换两个元素,这样姓名和成绩就是一一对应的排序了
}
}
}
这样应该能够满足楼主你的要求了吧~

4. 学生成绩管理系统 思路

给你个简单的介绍:
VB开发平台的特点
SQL数据库的特点
功能需求分析

如果你想要别人完全帮你写好又不愿意给分
你找错地方了

5. 学生成绩管理系统选题的背景和意义,课题研究的主要内容.主要研究(设计)方法论述,求这3个怎么写

90年代以来,西方发达国家大部分高校均成功地完成了数字化校园建设工作。目前我国的信息数字化工作也进入一个全新发展时期,特别是高校的信息化建设已进入了全面的发展阶段,诸多高校充分地认识到,信息化建设己经成为了高校提高自身管理水平、提升综合竞争实力的重要手段。在高校,各种信息管理系统层出不穷。Web数据库技术已经成为应用最为广泛的网站架构基础技术在应用系统中,Web提供了与客户进行通信联络的有效手段。而构建浙江水利水电专科学校学生管理信息系统也成了我校重要的议题。
学生成绩管理系统是典型的信息管理系统(MIS),其开发主要包括后台数据库的建立和维护以及前端应用程序的开发。对于前者要求建立起数据一致性和完整性强、安全性高的数据库;对于后者则要求应用程序具有功能完备、易使用、易维护等特点。本文着重阐述了学生学籍管理系统的整体开发过程。介绍了系统的开发环境以及开发工具,对于设计思想和设计流程也做出了全面的叙述,在数据库创建思想以及各个数据表之间的具体关联等方面也做出了详细说明,并且具体剖析了系统各个功能的实现过程以及详细设计过程,在绘制简单系统功能模块图的同时,力求更加清晰地表明设计思想以及对整个程序设计的规划及具体实现。在进行了广泛需求调查的基础上,作者通过可行性分析,专门设计了一套基于/S结构的学生管理系统。该系统能够很好的满足学校教学、管理方面的要求。论文最后总结了系统的不足,给出了未来努力的方向。

6. 数据结构(学生成绩管理系统)

http://wenku..com/view/dc69e8ef5ef7ba0d4a733bff.html

7. 学生成绩管理系统的目的和意义是什么

可以更快的使学生的成绩相加并且排名,这对老师来说是很好可以减少很多工作量,在多人版多课考试时很有用,权只要成绩出来,输入电脑就可以在几秒内是成绩相加,并知道了某学生在学校排名,但对学生来说,考完试自由的时间就很少了

8. 2.学生成绩管理系统 (c语言做)

给你找一份类似的。不完全一致。做课程设计还是可行的。自己稍加修改即可!

总体设计
一、 仔细阅读系统要求,首先将此系统化分为如下模块(即如下函数)

1、输入初始的学生信息:其中包括学生的姓名、学号和性别以及学生的语文、数学、英语和计算机等相关信息;可用函数cin(stu *p1)来实现此操作。

2、查询模块:可用stu *lookdata(stu *p1) 来实现。找到就输出此学生全部信息包括学生的语文、数学、英语和计算机等的成绩。

3、插入模块:可用insert( )函数来实现。其中通过学号的大小来比较的,并且以此来排序。

4、输出学生的信息以及成绩:通过学生的姓名来查看学生的语文、数学、英语和计算机等相关成绩,同时也可以分别通过caverage() 、maverage() 、eaverage() 和comaverage() 来输出语文、数学、英语和计算机等成绩的平均分数、最高和最低分数。

5、退出系统:可用一个函数exit()来实现,首先将信息保存到文件中,释放动态创建的内存空间,再退出此程序。

二、系统主模块结构图:

详细设计
一、 界面设计
此系统界面采用图形和数字化菜单设计。
主界面设计如下:

学生成绩管理系统

请选择相应的数字执行相应的功能:
1:是否输入其他数据
2:查看数据
3:插入数据
4:查找数据
5:更新数据
6:保留数据
7:显示或打印数据
8:语文成绩状况
9:数学成绩状况
10:英语成绩状况
11:计算机成绩状况
12:?
13:退出系统
二、 数据结构设计:
程序设计中用到的结构体类型:
学生信息结构体类型:
typedef struct student{
char name[MAX];
int num[MAX];
char sex[MAX];
int chinese;
int mathematic;
int english;
int computer;
struct student *next;
}

程序代码:
//原始密码是123456
#include"stdio.h"
#include"stddef.h"
#include"stddef.h"
#include"string.h"
#define MAX 10
typedef struct student{ /*定义结构体*/
char name[MAX]; /*姓名*/
int num[MAX]; /* 学号*/
char sex[MAX]; /*性别*/
int chinese; /*语文*/
int mathematic; /* 数学*/
int english; /*英语*/
int computer; /*计算机*/
struct student *next; /*结构体指针*/
}stu;
stu *head; /*头指针*/
void print() /*显示或打印函数*/
{
system("cls");
printf("\t\t\tScore Manage System\n"); /*成绩管理系统*/
printf("<1>Enter Record\t"); /*输入数据*/
printf("<2>Display\t"); /*显示*/
printf("<3>Insert\t"); /*插入数据*/
printf("<4>Quest\t"); /*访问数据*/
printf("<5>Update\t"); /*以前数据*/
printf("<6>Save\t"); /*保留数据*/
printf("<7>Fresh\t"); /*更新数据*/
printf("<8>Chinese Average\t"); /*语文平均成绩*/
printf("<9>Math Average\t"); /*数学平均成绩*/
printf("<10>English Average\t"); /*英语平均成绩*/
printf("<11>Computer Average\t"); /*计算机平均成绩*/
printf("<12>Quit\t\n"); /*退出*/
}

void cin(stu *p1) /*输入相关数据的函数*/
{ printf("Enter name:\n");
scanf("%s",&p1->name);
printf("Enter num:\n");
scanf("%d",&p1->num);
printf("Enter sex:\n");
scanf("%s",&p1->sex);
printf("Enter score:\n");
printf("Enter chinese:\n");
scanf("%d",&p1->chinese);
printf("Enter math:\n");
scanf("%d",&p1->mathematic);
printf("Enter English:\n");
scanf("%d",&p1->english);
printf("Enter Computer:\n");
scanf("%d",&p1->computer);
}
stu *cindata() /*其他数据是否继续输入的函数*/
{ stu *p1,*p2;
int i=1;
char ch;
p1=(stu *)malloc(sizeof(stu));
head=p1;
while(i)
{
cin(p1);
printf("Do you Want to Continue?yes or no"); /*是否继续输入数据*/
ch=getchar();
ch=getchar();
if(ch=='n'||ch=='N')
{ i=0;
p1->next=NULL;
}
else
{ p2=p1;
p1=(stu *)malloc(sizeof(stu));
p2->next=p1;
}
}
return(p1->next);
}

stu *lookdata(stu *p1) /*查看数据的函数*/
{
while(p1!=NULL)
{ printf("Num:%d\t",p1->num);
printf("Name:%s\t",p1->name);
printf("Sex:%s\t",p1->sex);
printf("\n");
printf("Chinese:%d\t",p1->chinese);
printf("Math:%d\t",p1->mathematic);
printf("English:%d\t",p1->english);
printf("Computer:%d\t",p1->computer);
printf("\n");
p1=p1->next;
}
return p1;
}

void insert() /*通过比较学号来插入数据的函数*/
{ stu *p1,*p3,*p2;
char ch;
p1=head;
p3=(stu *)malloc(sizeof(stu));

p3->next=NULL;
if(head==NULL){ head=p3; return;}
cin(p3);
while(p1!=NULL&&(p1->num<p3->num)) /*通过学号的比较来插入*/
{ p2=p1;p1=p1->next;}
if(p2==head) {p3->next=head; head=p3; return;}
p3->next=p1;
p2->next=p3;

}

find(stu *p2) /*通过姓名查找查看数据的函数*/
{ char name[20];
int b=0;
printf("Enter the name of the student you want to find:"); /*通过姓名查看*/
scanf("%s",name);
while(p2!=NULL)
{if(strcmp(name,p2->name)==0)
{
printf("The data you want has be found\n");
printf(" Name:%s\t",p2->name);
printf("Num:%d\t",p2->num);
printf("sex%s\t",p2->sex);
printf("\n");
printf("Chinese:%d\t",p2->chinese);
printf("Math:%d\t",p2->mathematic);
printf("English:%d\t",p2->english);
printf("Computer:%d\t",p2->computer);
printf("\n");

b=1;
}
else if(b==0)
printf("sorry not find data!");
p2=p2->next;
}

if(b==1)
{
print();
printf("Find one\n");}
else
{print();
printf("Not find\n");

}
}

void caverage() /*求各学生语文平均分、最高和最低分成绩的函数*/
{ stu *p1;
int i;
float max=0.0,min=200.0;
float sum=0.0,aver=0;
p1=head;
if(p1==NULL)
printf("not data!");
else
{for(i=0;p1!=NULL;i++,p1=p1->next)
sum+=p1->chinese;
aver=sum/i;

p1=head;
for(i=0;p1!=NULL;i++,p1=p1->next)
{if(max<p1->chinese)
max=p1->chinese;
}
p1=head;
for(i=0;p1!=NULL;i++,p1=p1->next)
if(min>p1->chinese)
min=p1->chinese;
}
printf("Chinese Average:%f",aver);
printf("Chinese Max:%f",max);
printf("Chinese Min:%f",min);
}

void maverage() /*求各学生数学平均分、最高和最低分成绩的函数*/
{ stu *p1;
int i;
float max=0.0,min=200.0;
float sum=0.0,aver=0;
p1=head;
if(p1==NULL)
printf("not data!");
else
{for(i=0;p1!=NULL;i++,p1=p1->next)
sum+=p1->mathematic;
aver=sum/i;

p1=head;
for(i=0;p1!=NULL;i++,p1=p1->next)
{if(max<p1->mathematic)
max=p1->mathematic;
}
p1=head;
for(i=0;p1!=NULL;i++,p1=p1->next)
if(min>p1->mathematic)
min=p1->mathematic;
}
printf("Mathe Average:%f",aver);
printf("Mathe Max:%f",max);
printf("Mathe Min:%f",min);
}

void eaverage() /*求各学生英语平均分、最高和最低分成绩的函数*/
{ stu *p1;
int i;
float max=0.0,min=200.0;
float sum=0.0,aver=0;
p1=head;
if(p1==NULL)
printf("not data!");
else
{for(i=0;p1!=NULL;i++,p1=p1->next)
sum+=p1->english;
aver=sum/i;

p1=head;
for(i=0;p1!=NULL;i++,p1=p1->next)
{if(max<p1->english)
max=p1->english;
}
p1=head;
for(i=0;p1!=NULL;i++,p1=p1->next)
if(min>p1->english)
min=p1->english;
}
printf("English Average:%f",aver);
printf("English Max:%f",max);
printf("English Min:%f",min);
}

void comaverage() /*求各学生计算机平均分、最高和最低分成绩的函数*/
{ stu *p1;
int i;
float max=0.0,min=200.0;
float sum=0.0,aver=0;
p1=head;
if(p1==NULL)
printf("not data!");
else
{for(i=0;p1!=NULL;i++,p1=p1->next)
sum+=p1->computer;
aver=sum/i;

p1=head;
for(i=0;p1!=NULL;i++,p1=p1->next)
{if(max<p1->computer)
max=p1->computer;
}
p1=head;
for(i=0;p1!=NULL;i++,p1=p1->next)
if(min>p1->computer)
min=p1->computer;
}
printf("Computer Average:%f",aver);
printf("Computer Max:%f",max);
printf("Computer Min:%f",min);
}

update(stu *p2) /*通过姓名查找来更新数据*/
{
char name[10]; /*p2为指向结构体struct student的指针*/
int b=0;
printf("Enter The Name"); /*输入姓名*/
scanf("%s",name);

while(p2!=NULL)
{if(strcmp(name,p2->name)==0)
{
printf("Find you data\n");
scanf("Name:%s",p2->name);
scanf("Num:%s",p2->num);
scanf("Sex:%s",p2->sex);
scanf("Chinese:%d",p2->chinese);
scanf("Math:%d",p2->mathematic);
scanf("english:%d",p2->english);
scanf("Computer:%d",p2->computer);
printf("Success!");

b=1;}
else if(b==0)
printf("Sorry not Find data!");
p2=p2->next;}
if(b==0)
{print();
printf("Sorry not Find data!");
}
else
{
print();
printf("Finish!");
}
}

save(stu *p2) /*保留数据函数*/
{
FILE *fp;
char file[10];
printf("Enter file name"); /*输入文件名*/
scanf("%s",file);
fp=fopen(file,"w");
while(p2!=NULL)
{
fprintf(fp,"%s",p2->name);
fprintf(fp,"%s",p2->num);
fprintf(fp,"%s",p2->sex);
fprintf(fp,"%d",p2->chinese);
fprintf(fp,"%d",p2->mathematic);
fprintf(fp,"%d",p2->english);
fprintf(fp,"%d",p2->computer);
p2=p2->next;
}
fclose(fp);
}

char password[7]="123456"; /*定义初始密码*/

void main() /*主函数*/
{ int choice;
stu *p2;
char s[8];
int flag=0,i; /*标志项*/
int n=3;
do{ printf("Enter password:\n");
scanf("%s",s);
if(!strcmp(s,password)) /*进行密码匹配验证*/
{ printf("PASS\n\n\n");
flag=1;
break;
}
else{
printf("Error Enter again:\n");
n--;
}
}
while(n>0);
if(!flag)
{printf("you have Enter 3 times!"); /*输入密码超过了3次!!*/
exit(0); /*自动退出*/
}
/*密码验证成功后进入的界面*/

printf("~~~~~~~~~~\t\t\t~~~~~~~~~~~~\n"); /*操作界面*/
printf("\t\tWelcom to the Mis\n");
printf("Author:-----\tClass:------\tNum:------\n"); /*作者,班级和号码*/
printf("Adress:HG\n"); /*地址*/
printf("%%%%%%%%%%%%%%%%%%%%%%%%%%%\n");
printf("\t\tEnter OP:\n");
printf("\n\n\n\n");
printf("==============\t\t==============\n");
printf("==============\t\t==============\n");
printf("\t\tEnter the MIS yes or no\n"); /*问进入系统与否*/

scanf("%d",&choice);
if(choice=='n'||choice=='N')
exit(1);

print();
while(1)
{
printf("Enter choice:");
scanf("%d",&i);
if(i<1||i>13)
{
printf("Enter num from 1 to 13:\n"); /*再从1-13中进行选择*/
exit(1);
}

switch(i)
{ case 1:
p2=cindata(); /*其他数据是否继续输入的函数*/
break;
case 2:
p2=lookdata(head); /*查看数据的函数*/
break;
case 3:
insert(); /*通过比较学号来插入数据的函数*/
break;
case 4:
find(head); /*通过姓名查找查看数据的函数*/
break;
case 5:
update(head); /*通过姓名查找来更新数据*/
break;
case 6:
save(head); /*保留数据函数*/
break;
case 7:
print(); /*显示或打印函数*/
break;
case 8:
caverage(); /*求各学生语文平均分、最高和最低分成绩的函数*/
break;
case 9:
maverage(); /*求各学生数学平均分、最高和最低分成绩的函数*/
break;
case 10:
eaverage(); /*求各学生英语平均分、最高和最低分成绩的函数*/
break;
case 11:
comaverage(); /*求各学生计算机平均分、最高和最低分成绩的函数*/
break;
case 12:
; /*空操作*/
case 13:
exit(1); /*退出*/
break;
}
scanf("%d",&i);
}
}

9. 学生成绩管理系统C语言编程

||#include<stdio.h> /*引用库函数*/
#include<stdlib.h>
#include<ctype.h>
#include<string.h>
typedef struct /*定义结构体数组*/
{
char num[10]; /*学号*/
char name[20]; /*姓名*/
int score; /*成绩*/
}Student;
Student stu[80]; /*结构体数组变量*/
int menu_select() /*菜单函数*/
{
char c;
do{
system("cls"); /*运行前清屏*/
printf("\t\t****Students' Grade Management System****\n"); /*菜单选择*/
printf("\t\t | 1. Input Records |\n");
printf("\t\t | 2. Display All Records |\n");
printf("\t\t | 3. Sort |\n");
printf("\t\t | 4. Insert a Record |\n");
printf("\t\t | 5. Delete a Record |\n");
printf("\t\t | 6. Query |\n");
printf("\t\t | 7. Statistic |\n");
printf("\t\t | 8. Add Records from a Text File|\n");
printf("\t\t | 9. Write to a Text file |\n");
printf("\t\t | 0. Quit |\n");
printf("\t\t*****************************************\n");
printf("\t\t\tGive your Choice(0-9):");
c=getchar(); /*读入选择*/
}while(c<'0'||c>'9');
return(c-'0'); /*返回选择*/
}
int Input(Student stud[],int n) /*输入若干条记录*/
{int i=0;
char sign,x[10]; /*x[10]为清除多余的数据所用*/
while(sign!='n'&&sign!='N') /*判断*/
{ printf("\t\t\tstudent's num:"); /*交互输入*/
scanf("\t\t\t%s",stud[n+i].num);
printf("\t\t\tstudent's name:");
scanf("\t\t\t%s",stud[n+i].name);
printf("\t\t\tstudent's score:");
scanf("\t\t\t%d",&stud[n+i].score);
gets(x); /*清除多余的输入*/
printf("\t\t\tany more records?(Y/N)");
scanf("\t\t\t%c",&sign); /*输入判断*/
i++;
}
return(n+i);
}
void Display(Student stud[],int n) /*显示所有记录*/
{
int i;
printf("\t\t\t-----------------------------------\n"); /*格式头*/
printf("\t\t\tnumber name score\n");
printf("\t\t\t-----------------------------------\n");
for(i=1;i<n+1;i++) /*循环输入*/
{
printf("\t\t\t%-16s%-15s%d\n",stud[i-1].num,stud[i-1].name,stud[i-1].score);
if(i>1&&i%10==0) /*每十个暂停*/
{printf("\t\t\t-----------------------------------\n"); /*格式*/
printf("\t\t\t");
system("pause");
printf("\t\t\t-----------------------------------\n");
}
}
printf("\t\t\t");
system("pause");
}
void Sort_by_num(Student stud[],int n) /*按学号排序*/
{ int i,j,*p,*q,s;
char t[10];
for(i=0;i<n-1;i++) /*冒泡法排序*/
for(j=0;j<n-1-i;j++)
if(strcmp(stud[j].num,stud[j+1].num)>0)
{strcpy(t,stud[j+1].num);
strcpy(stud[j+1].num,stud[j].num);
strcpy(stud[j].num,t);
strcpy(t,stud[j+1].name);
strcpy(stud[j+1].name,stud[j].name);
strcpy(stud[j].name,t);
p=&stud[j+1].score;
q=&stud[j].score;
s=*p;
*p=*q;
*q=s;
}
}
int Insert_a_record(Student stud[],int n) /*插入一条记录*/
{char x[10]; /*清除多余输入所用*/
printf("\t\t\tstudent's num:"); /*交互式输入*/
scanf("\t\t\t%s",stud[n].num);
printf("\t\t\tstudent's name:");
scanf("\t\t\t%s",stud[n].name);
printf("\t\t\tstudent's score:");
scanf("\t\t\t%d",&stud[n].score);
gets(x);
n++;
Sort_by_num(stud,n); /*调用排序函数*/
printf("\t\t\tInsert Successed!\n"); /*返回成功信息*/
return(n);
}
int Delete_a_record(Student stud[],int n) /*按姓名查找,删除一条记录*/
{ char s[20];
int i=0,j;
printf("\t\t\ttell me his(her) name:"); /*交互式问寻*/
scanf("%s",s);
while(strcmp(stud[i].name,s)!=0&&i<n) i++; /*查找判断*/
if(i==n)
{ printf("\t\t\tnot find!\n"); /*返回失败信息*/
return(n);
}
for(j=i;j<n-1;j++) /*删除操作*/
{
strcpy(stud[j].num,stud[j+1].num);
strcpy(stud[j].name,stud[j+1].name);
stud[j].score=stud[j+1].score;
}
printf("\t\t\tDelete Successed!\n"); /*返回成功信息*/
return(n-1);
}
void Query_a_record(Student stud[],int n) /*查找并显示一个记录*/
{ char s[20];
int i=0;
printf("\t\t\tinput his(her) name:"); /*交互式输入*/
scanf("\t\t\t%s",s);
while(strcmp(stud[i].name,s)!=0&&i<n) i++; /*查找判断*/
if(i==n)
{ printf("\t\t\tnot find!\n"); /*输入失败信息*/
return;

}
printf("\t\t\this(her) number:%s\n",stud[i].num); /*输出该学生信息*/
printf("\t\t\this(her) score:%d\n",stud[i].score);
}
void Statistic(Student stud[],int n) /*新增功能,输出统计信息*/
{ int i,j=0,k=0,sum=0;
float aver; /*成绩平均值*/
for(i=0;i<n;i++) /*循环输入判断*/
{
sum+=stud[i].score;
if(stud[j].score>stud[i].score) j=i;
if(stud[k].score<stud[i].score) k=i;
}
aver=1.0*sum/n;
printf("\t\t\tthere are %d records.\n",n); /*总共记录数*/
printf("\t\t\tthe hignest score:\n"); /*最高分*/
printf("\t\t\tnumber:%s name:%s score:%d\n",stud[j].num,stud[j].name,stud[j].score);
printf("\t\t\tthe lowest score:\n"); /*最低分*/
printf("\t\t\tnumber:%s name:%s score:%d\n",stud[k].num,stud[k].name,stud[k].score);
printf("\t\t\tthe average score is %5.2f\n",aver); /*平均分*/
}
int AddfromText(Student stud[],int n) /*从文件中读入数据*/
{ int i=0,num;
FILE *fp; /*定义文件指针*/
char filename[20]; /*定义文件名*/
printf("\t\t\tInput the filename:");
scanf("\t\t\t%s",filename); /*输入文件名*/
if((fp=fopen(filename,"rb"))==NULL) /*打开文件*/
{ printf("\t\t\tcann't open the file\n"); /*打开失败信息*/
printf("\t\t\t");
system("pause");
return(n);
}
fscanf(fp,"%d",&num); /*读入总记录量*/
while(i<num) /*循环读入数据*/
{
fscanf(fp,"%s%s%d",stud[n+i].num,stud[n+i].name,&stud[n+i].score);
i++;
}
n+=num;
fclose(fp); /*关闭文件*/
printf("\t\t\tSuccessed!\n");
printf("\t\t\t");
system("pause");
return(n);
}
void WritetoText(Student stud[],int n) /*将所有记录写入文件*/
{
int i=0;
FILE *fp; /*定义文件指针*/
char filename[20]; /*定义文件名*/
printf("\t\t\tWrite Records to a Text File\n"); /*输入文件名*/
printf("\t\t\tInput the filename:");
scanf("\t\t\t%s",filename);
if((fp=fopen(filename,"w"))==NULL) /*打开文件*/
{
printf("\t\t\tcann't open the file\n");
system("pause");
return;
}
fprintf(fp,"%d\n",n); /*循环写入数据*/
while(i<n)
{
fprintf(fp,"%-16s%-15s%d\n",stud[i].num,stud[i].name,stud[i].score);
i++;
}
fclose(fp); /*关闭文件*/
printf("Successed!\n"); /*返回成功信息*/
}
void main() /*主函数*/
{
int n=0;
for(;;)
{
switch(menu_select()) /*选择判断*/
{
case 1:
printf("\t\t\tInput Records\n"); /*输入若干条记录*/
n=Input(stu,n);
break;
case 2:
printf("\t\t\tDisplay All Records\n"); /*显示所有记录*/
Display(stu,n);
break;
case 3:
printf("\t\t\tSort\n");
Sort_by_num(stu,n); /*按学号排序*/
printf("\t\t\tSort Suceessed!\n");
printf("\t\t\t");
system("pause");
break;
case 4:
printf("\t\t\tInsert a Record\n");
n=Insert_a_record(stu,n); /*插入一条记录*/
printf("\t\t\t");
system("pause");
break;
case 5:
printf("\t\t\tDelete a Record\n");
n=Delete_a_record(stu,n); /*按姓名查找,删除一条记录*/
printf("\t\t\t");
system("pause");
break;
case 6:
printf("\t\t\tQuery\n");
Query_a_record(stu,n); /*查找并显示一个记录*/
printf("\t\t\t");
system("pause");
break;
case 7:
printf("\t\t\tStatistic\n");
Statistic(stu,n); /*新增功能,输出统计信息*/
printf("\t\t\t");
system("pause");
break;
case 8:
printf("\t\t\tAdd Records from a Text File\n");
n=AddfromText(stu,n); /*新增功能,输出统计信息*/
break;
case 9:
printf("\t\t\tWrite to a Text file\n");
WritetoText(stu,n); /*循环写入数据*/
printf("\t\t\t");
system("pause");
break;
case 0:
printf("\t\t\tHave a Good Luck,Bye-bye!\n"); /*结束程序*/
printf("\t\t\t");
system("pause");
exit(0);
}
}
}

四、函数调用关系图
注:“→”代表调用
Input函数
打印链表记录
Display函数
输入若干条记录
menu_select()函数
选择菜单
Sort_by_num函数
显示所有记录
Delete_a_record函数
按姓名查找,删除一条记录
Query_a_record查找并显示一条记录
Statistic函数
输出统计信息 (新增)
AddfromText函数
从正文中添加数据到结构体数组中
Main函数
Insert_a_record插入一条记录
WritetoText函数 将所有数据写入文件中
退出程序
Reverse(head)函数
按学号排序
五、设计测试流程
1、进入界面
2、输入选项1,回车;
按提示输入数据:
3、回到主菜单;
输入选项7,回车;
输入文件名:data.txt,回车;
出现成功提示,则读入文件操作成功。
4、回到主菜单,输入2,回车
每10个暂停显示数据
5、回到主菜单,输入3,回车
出现排序成功信息。
6、回到主菜单,输入4,回车
按提示插入一组数据
7、回到主菜单,输入5,回车
按提示输入姓名,删除数据
出现删除成功的信息
8、回到主菜单,输入6,回车
输入姓名进行查询
9、回到主菜单,输入7,回车
出现统计信息
10、回到主菜单,输入9,回车
输入result.txt,回车
出现成功写入文件的信息
11、回到主菜单,输入0,回车退出系统
回答者:kingkey001 - 试用期 一级 7-14 22:38
修改答复: kingkey001,您要修改的答复如下: 积分规则 关闭
C语言课程设计报告-------学生成绩简单管理程序
一、系统菜单的主要功能
(1)输入若干条记录
(2)显示所有记录
(3)按学号排序
(4)插入一条记录
(5)按姓名查找,删除一条记录
(6)查找并显示一条记录
(7)输出统计信息 (新增)
(8)从正文中添加数据到结构体数组中
(9)将所有数据写入文件中
(0)退出程序
二、题目分析
该题主要考察学生对结构体,指针,文件的操作,以及C语言算法的掌握,所以完成此道题目要求较强的设计能力,尤其是要有一种大局观的意识。如何调程序也非常重要,通过这个程序可以学习到以前调试短程序没有的的经验。
菜单中的每一个选项都对应一个子程序,子程序的算法几乎囊获了所有C语言学过的技巧,下面就各个子程序中的功能进行说明:
功能1和4的算法相似,输入一条记录到结构体中去,其中有一部很关键,就是通过gets将所有的多余的字符,回车读去,否则就会出错。
功能2是显示所有的记录,通过循环输出,格式也比较重要。
功能3为按学号排序,因为学号定义成了字符数组的形式,因此在运用冒泡法进行排序的时候,要用到strcmp,strcpy等函数。
功能5为按姓名删除记录,先输入姓名,再一一比较,如果没有则返回失败信息,如果找到就将此记录都向前移一位,返回n-1。
功能6的算法在5中就已经体现了,输入姓名,一一比较。
功能7为新增的功能,因为考虑到原来给出的函数中竟然没有对学生成绩的统计功能,因此新增此功能,可以得出所有的记录个数,最高、最低、平均分,并输出相关的学生信息等。
功能8和9是对文件的操作,提前准备好数据。
三、程序正文部分
#include<stdio.h> /*引用库函数*/
#include<stdlib.h>
#include<ctype.h>
#include<string.h>
typedef struct /*定义结构体数组*/
{
char num[10]; /*学号*/
char name[20]; /*姓名*/
int score; /*成绩*/
}Student;
Student stu[80]; /*结构体数组变量*/
int menu_select() /*菜单函数*/
{
char c;
do{
system("cls"); /*运行前清屏*/
printf("\t\t****Students' Grade Management System****\n"); /*菜单选择*/
printf("\t\t | 1. Input Records |\n");
printf("\t\t | 2. Display All Records |\n");
printf("\t\t | 3. Sort |\n");
printf("\t\t | 4. Insert a Record |\n");
printf("\t\t | 5. Delete a Record |\n");
printf("\t\t | 6. Query |\n");
printf("\t\t | 7. Statistic |\n");
printf("\t\t | 8. Add Records from a Text File|\n");
printf("\t\t | 9. Write to a Text file |\n");
printf("\t\t | 0. Quit |\n");
printf("\t\t*****************************************\n");
printf("\t\t\tGive your Choice(0-9):");
c=getchar(); /*读入选择*/
}while(c<'0'||c>'9');
return(c-'0'); /*返回选择*/
}
int Input(Student stud[],int n) /*输入若干条记录*/
{int i=0;
char sign,x[10]; /*x[10]为清除多余的数据所用*/
while(sign!='n'&&sign!='N') /*判断*/
{ printf("\t\t\tstudent's num:"); /*交互输入*/
scanf("\t\t\t%s",stud[n+i].num);
printf("\t\t\tstudent's name:");
scanf("\t\t\t%s",stud[n+i].name);
printf("\t\t\tstudent's score:");
scanf("\t\t\t%d",&stud[n+i].score);
gets(x); /*清除多余的输入*/
printf("\t\t\tany more records?(Y/N)");
scanf("\t\t\t%c",&sign); /*输入判断*/
i++;
}
return(n+i);
}
void Display(Student stud[],int n) /*显示所有记录*/
{
int i;
printf("\t\t\t-----------------------------------\n"); /*格式头*/
printf("\t\t\tnumber name score\n");
printf("\t\t\t-----------------------------------\n");
for(i=1;i<n+1;i++) /*循环输入*/
{
printf("\t\t\t%-16s%-15s%d\n",stud[i-1].num,stud[i-1].name,stud[i-1].score);
if(i>1&&i%10==0) /*每十个暂停*/
{printf("\t\t\t-----------------------------------\n"); /*格式*/
printf("\t\t\t");
system("pause");
printf("\t\t\t-----------------------------------\n");
}
}
printf("\t\t\t");
system("pause");
}
void Sort_by_num(Student stud[],int n) /*按学号排序*/
{ int i,j,*p,*q,s;
char t[10];
for(i=0;i<n-1;i++) /*冒泡法排序*/
for(j=0;j<n-1-i;j++)
if(strcmp(stud[j].num,stud[j+1].num)>0)
{strcpy(t,stud[j+1].num);
strcpy(stud[j+1].num,stud[j].num);
strcpy(stud[j].num,t);
strcpy(t,stud[j+1].name);
strcpy(stud[j+1].name,stud[j].name);
strcpy(stud[j].name,t);
p=&stud[j+1].score;
q=&stud[j].score;
s=*p;
*p=*q;
*q=s;
}
}
int Insert_a_record(Student stud[],int n) /*插入一条记录*/
{char x[10]; /*清除多余输入所用*/
printf("\t\t\tstudent's num:"); /*交互式输入*/
scanf("\t\t\t%s",stud[n].num);
printf("\t\t\tstudent's name:");
scanf("\t\t\t%s",stud[n].name);
printf("\t\t\tstudent's score:");
scanf("\t\t\t%d",&stud[n].score);
gets(x);
n++;
Sort_by_num(stud,n); /*调用排序函数*/
printf("\t\t\tInsert Successed!\n"); /*返回成功信息*/
return(n);
}
int Delete_a_record(Student stud[],int n) /*按姓名查找,删除一条记录*/
{ char s[20];
int i=0,j;
printf("\t\t\ttell me his(her) name:"); /*交互式问寻*/
scanf("%s",s);
while(strcmp(stud[i].name,s)!=0&&i<n) i++; /*查找判断*/
if(i==n)
{ printf("\t\t\tnot find!\n"); /*返回失败信息*/
return(n);
}
for(j=i;j<n-1;j++) /*删除操作*/
{
strcpy(stud[j].num,stud[j+1].num);
strcpy(stud[j].name,stud[j+1].name);
stud[j].score=stud[j+1].score;
}
printf("\t\t\tDelete Successed!\n"); /*返回成功信息*/
return(n-1);
}
void Query_a_record(Student stud[],int n) /*查找并显示一个记录*/
{ char s[20];
int i=0;
printf("\t\t\tinput his(her) name:"); /*交互式输入*/
scanf("\t\t\t%s",s);
while(strcmp(stud[i].name,s)!=0&&i<n) i++; /*查找判断*/
if(i==n)
{ printf("\t\t\tnot find!\n"); /*输入失败信息*/
return;

}
printf("\t\t\this(her) number:%s\n",stud[i].num); /*输出该学生信息*/
printf("\t\t\this(her) score:%d\n",stud[i].score);
}
void Statistic(Student stud[],int n) /*新增功能,输出统计信息*/
{ int i,j=0,k=0,sum=0;
float aver; /*成绩平均值*/
for(i=0;i<n;i++) /*循环输入判断*/
{
sum+=stud[i].score;
if(stud[j].score>stud[i].score) j=i;
if(stud[k].score<stud[i].score) k=i;
}
aver=1.0*sum/n;
printf("\t\t\tthere are %d records.\n",n); /*总共记录数*/
printf("\t\t\tthe hignest score:\n"); /*最高分*/
printf("\t\t\tnumber:%s name:%s score:%d\n",stud[j].num,stud[j].name,stud[j].score);
printf("\t\t\tthe lowest score:\n"); /*最低分*/
printf("\t\t\tnumber:%s name:%s score:%d\n",stud[k].num,stud[k].name,stud[k].score);
printf("\t\t\tthe average score is %5.2f\n",aver); /*平均分*/
}
int AddfromText(Student stud[],int n) /*从文件中读入数据*/
{ int i=0,num;
FILE *fp; /*定义文件指针*/
char filename[20]; /*定义文件名*/
printf("\t\t\tInput the filename:");
scanf("\t\t\t%s",filename); /*输入文件名*/
if((fp=fopen(filename,"rb"))==NULL) /*打开文件*/
{ printf("\t\t\tcann't open the file\n"); /*打开失败信息*/
printf("\t\t\t");
system("pause");
return(n);
}
fscanf(fp,"%d",&num); /*读入总记录量*/
while(i<num) /*循环读入数据*/
{
fscanf(fp,"%s%s%d",stud[n+i].num,stud[n+i].name,&stud[n+i].score);
i++;
}
n+=num;
fclose(fp); /*关闭文件*/
printf("\t\t\tSuccessed!\n");
printf("\t\t\t");
system("pause");
return(n);
}
void WritetoText(Student stud[],int n) /*将所有记录写入文件*/
{
int i=0;
FILE *fp; /*定义文件指针*/
char filename[20]; /*定义文件名*/
printf("\t\t\tWrite Records to a Text File\n"); /*输入文件名*/
printf("\t\t\tInput the filename:");
scanf("\t\t\t%s",filename);
if((fp=fopen(filename,"w"))==NULL) /*打开文件*/
{
printf("\t\t\tcann't open the file\n");
system("pause");
return;
}
fprintf(fp,"%d\n",n); /*循环写入数据*/
while(i<n)
{
fprintf(fp,"%-16s%-15s%d\n",stud[i].num,stud[i].name,stud[i].score);
i++;
}
fclose(fp); /*关闭文件*/
printf("Successed!\n"); /*返回成功信息*/
}
void main() /*主函数*/
{
int n=0;
for(;;)
{
switch(menu_select()) /*选择判断*/
{
case 1:
printf("\t\t\tInput Records\n"); /*输入若干条记录*/
n=Input(stu,n);
break;
case 2:
printf("\t\t\tDisplay All Records\n"); /*显示所有记录*/
Display(stu,n);
break;
case 3:
printf("\t\t\tSort\n");
Sort_by_num(stu,n); /*按学号排序*/
printf("\t\t\tSort Suceessed!\n");
printf("\t\t\t");
system("pause");
break;
case 4:
printf("\t\t\tInsert a Record\n");
n=Insert_a_record(stu,n); /*插入一条记录*/
printf("\t\t\t");
system("pause");
break;
case 5:
printf("\t\t\tDelete a Record\n");
n=Delete_a_record(stu,n); /*按姓名查找,删除一条记录*/
printf("\t\t\t");
system("pause");
break;
case 6:
printf("\t\t\tQuery\n");
Query_a_record(stu,n); /*查找并显示一个记录*/
printf("\t\t\t");
system("pause");
break;
case 7:
printf("\t\t\tStatistic\n");
Statistic(stu,n); /*新增功能,输出统计信息*/
printf("\t\t\t");
system("pause");
break;
case 8:
printf("\t\t\tAdd Records from a Text File\n");
n=AddfromText(stu,n); /*新增功能,输出统计信息*/
break;
case 9:
printf("\t\t\tWrite to a Text file\n");
WritetoText(stu,n); /*循环写入数据*/
printf("\t\t\t");
system("pause");
break;
case 0:
printf("\t\t\tHave a Good Luck,Bye-bye!\n"); /*结束程序*/
printf("\t\t\t");
system("pause");
exit(0);
}
}
}

四、函数调用关系图
注:“→”代表调用
Input函数
打印链表记录
Display函数
输入若干条记录
menu_select()函数
选择菜单
Sort_by_num函数
显示所有记录
Delete_a_record函数
按姓名查找,删除一条记录
Query_a_record查找并显示一条记录
Statistic函数
输出统计信息 (新增)
AddfromText函数
从正文中添加数据到结构体数组中
Main函数
Insert_a_record插入一条记录
WritetoText函数 将所有数据写入文件中
退出程序
Reverse(head)函数
按学号排序
五、设计测试流程
1、进入界面
2、输入选项1,回车;
按提示输入数据:
3、回到主菜单;
输入选项7,回车;
输入文件名:data.txt,回车;
出现成功提示,则读入文件操作成功。
4、回到主菜单,输入2,回车
每10个暂停显示数据
5、回到主菜单,输入3,回车
出现排序成功信息。
6、回到主菜单,输入4,回车
按提示插入一组

10. 学生成绩管理系统程序设计思路

我们可以针对此来题目提供一套与源要求相匹配的源码(教学版,个人版,专业版,企业版)
为获取建议,你需要告诉我们可用的E-Mail地址。

您还可以直接应用Baihi联系我们, 或使用网络知道向我求助, 或借助网络知道发送短消息
或QQ:六五七幺五六幺五('幺'读 yao 一声)
有时间可以完成你的问题

ES:\
交易提醒:预付订金是陷阱
开发信息管理系统,B2B/B2C电子商务,企业/个人网站更有优惠

热点内容
武汉大学学生会辅导员寄语 发布:2021-03-16 21:44:16 浏览:612
七年级学生作文辅导学案 发布:2021-03-16 21:42:09 浏览:1
不屑弟高考成绩 发布:2021-03-16 21:40:59 浏览:754
大学毕业证会有成绩单 发布:2021-03-16 21:40:07 浏览:756
2017信阳学院辅导员招聘名单 发布:2021-03-16 21:40:02 浏览:800
查询重庆2018中考成绩查询 发布:2021-03-16 21:39:58 浏览:21
结业考试成绩怎么查询 发布:2021-03-16 21:28:40 浏览:679
14中医医师资格笔试考试成绩查分 发布:2021-03-16 21:28:39 浏览:655
名著赏析课程标准 发布:2021-03-16 21:27:57 浏览:881
北京大学商业领袖高端培训课程 发布:2021-03-16 21:27:41 浏览:919