学生成绩管理系统源代码_(数据结构与算法课设)C语言版_第1页
学生成绩管理系统源代码_(数据结构与算法课设)C语言版_第2页
学生成绩管理系统源代码_(数据结构与算法课设)C语言版_第3页
学生成绩管理系统源代码_(数据结构与算法课设)C语言版_第4页
学生成绩管理系统源代码_(数据结构与算法课设)C语言版_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、运行前7004 sun 98.0 89.0 97.0 94.7 284.0005 li 98.0 48.0 78.0 74.7 224.0002 zhao 98.0 78.0 59.0 78.3 235.0006 zhou 89.0 97.0 86.0 90.7 272.0003 qian 78.0 98.0 89.0 88.3 265.0001 chen 59.0 60.0 98.0 68.3 205.0007 wu 57.0 76.0 87.0 73.3 220.0代码# include <stdio.h> /使程序包含头文件<stdio.h> # include

2、<stdlib.h> /使程序包含头文件<stdlib.h> # include <string.h> /使程序包含头文件<string.h> # define SIZE 50 /定义常量SIZE来控制数组的长度 void input_num(struct Student stud, int n, int i); /声明学号输入函数 void input_name(struct Student stud, int n, int i); /声明姓名输入函数 void input_score(struct Student stud, int n, i

3、nt i); /声明成绩输入函数 void output_stu(struct Student stud, int n, int i); /声明输出函数 void stat_stu(struct Student stud, int n, int o); /声明统计函数 float class_avr(struct Student stud, int n, int o); /声明排序函数 void chenji_stu(struct Student stud, int n, int o);void desc_stu(struct Student stud, int n, int o); /声明降

4、序函数 int find_stu(struct Student stud, int n); /声明查找函数 void delete_stu(struct Student stud, int n, int y); /声明删除函数 void amend_stu(struct Student stud, int n, int y); /声明修改函数 void write_text(struct Student stud, int n); /声明保存文件函数 int add_text(struct Student stud, int n); /声明读取文件函数 struct Student /*声明结

5、构体*/ char num10; char name20; float score5; ; void main() /*主函数,是程序的入口*/ struct Student stuSIZE; /定义一个结构数组 int count = 0; /定义整型变量count用来存放学生信息的个数,初始化为0 int choice; /定义choice用于存放用户对主菜单的选择 int a; /用于接收主选单中scanf()函数的返回值 char judge; /用于帮助判断输入的选择是否正确 int flag_main; /用于判断主菜单用户输入的选择是否有误 int stat_choice = 0

6、; /定义stat_choice用于用户对统计项目的选择,初始化为0 int flag_stat; /用于接收scanf()函数的返回值 int flag_find; /定义flag_find用于接收查寻函数的返回值 char man_choice; /定义man_choice用于接收用户对是否进行修改删除的选择 int con_choice; /定义con_choice用于接收用户对修改或删除的选择 char sign_main; /定义sign_main接收用户对是否离开程序的选择 char sign_input; /定义sign_main接收用户对是否继续输入的选择 int i; /定义

7、i,j作为控制循环的变量 while (1) /形成一个死循环 system("color 71"); /设置输出显示颜色 /*输出主选菜单*/ printf("n=欢迎使用班级成绩管理系统=nn");printf("=请选择您要使用的功能=nn"); printf("tt-n"); printf("tttt 1:班级成绩录入 nn"); printf("tttt 2:班级成绩显示 nn"); printf("tttt 3:班级成绩统计 nn"); pri

8、ntf("tttt 4:班级成绩查询 nn"); printf("tttt 5:班级成绩修改 nn"); printf("tttt 6:班级成绩表 nn"); printf("tttt 7:班级成绩存档 nn"); printf("tttt 8:班级成绩读入 nn"); printf("tttt 0:退出 nn"); printf("tt-"); printf("="); /*输入对菜单的选择*/ do flag_main = 0; p

9、rintf("nttt 请您选择需要的操作(0-6):"); fflush(stdin); a = scanf("%d%c", &choice, &judge); if (a<2 | judge != 'n') printf("nttt 您的选择有误,请重新输入!n"); flag_main-; while (flag_main < 0); printf("nttt "); system("pause"); /令屏幕暂停待输入任意键后恢复运行 syst

10、em("cls"); /清屏 system("color 71"); /设置输出显示颜色 switch (choice) /把用户对主菜单的选择作为switch结构的判断条件 case (1): printf("ntt请录入学生信息:n"); i=0; /循环前对i清零 do if (count+i = 50) break; input_num(stu, count, i); /输入学号 input_name(stu, count, i); /输入姓名 input_score(stu, count, i); /录入成绩及总成绩平均成绩

11、 i+; /每录入一个学员信息i加1 printf("ntt还需要继续录入吗?(Y/N)"); /*产生是否继续录入的条件*/ fflush(stdin); sign_input = getchar(); while(sign_input = 'y' | sign_input= 'Y' ); /判断 count=count+i; /计算出本次录入后总的已录入成员个数 printf("tt"); break; case (2): /* printf("n显示班级成绩信息:n"); printf("

12、;-");printf("学号tt姓名tt数据库t算法tC语言t总成绩t平均成绩"); /*格式化输出提示信息*/printf(" 学生信息表n");*/printf(" =nn");printf("n");printf("学号 姓名 数据库 算法 C语言总成绩 平均成绩 n");printf("n");for (i = 0; i < count; i+) /*循环输出学员信息*/ output_stu(stu, count, i); /输出单个学员信息 pr

13、intf("n");break; case (3): while (stat_choice != 4) /*循环统计直到用户选择退出结束*/ printf("tt0:数据库n");printf("tt1:算法n");printf("tt2:C语言n");printf("tt3:平均成绩n");printf("tt4:结束统计n"); printf("nn请选择成绩统计的项目");fflush(stdin); flag_stat = scanf("

14、%d%c", &stat_choice, &a); /*接收用户选择并返回值给flag_stat*/if (flag_stat = 2 && a = 'n') /*如果成功接收用户选择则根据选择进行统计若选择有误提示重新输入*/ if (stat_choice = 0) /*根据选择0进行统计*/ desc_stu(stu, count, stat_choice); stat_stu(stu, count, stat_choice); else if (stat_choice = 1) /*根据选择1进行统计*/ desc_stu(st

15、u, count, stat_choice); stat_stu(stu, count, stat_choice); else if (stat_choice = 2) /*根据选择2进行统计*/ desc_stu(stu, count, stat_choice); stat_stu(stu, count, stat_choice); else if (stat_choice = 3) /*根据选择3进行统计*/ desc_stu(stu, count, stat_choice); stat_stu(stu, count, stat_choice); else if (stat_choice

16、= 4) /*选择4则break循环退出*/ break; else /*其它错误选择提示重新输入*/ printf("n您的输入有误,请重新输入!"); else /*若没成功接收用户选择则提示重新输入*/ printf("n您的输入有误,请重新输入!"); stat_choice =getchar(); /每次循环结束stat_choice归0 printf("n"); break;case (4): flag_find = find_stu(stu, count); /实现用户的查找功能 /*根据查找函数的返回值为用户显示查找的

17、信息*/ if (flag_find > 0) /*返回值大于0,用户选择的是姓名查找方式*/ printf("n 学号tt姓名tt数据库t算法tC语言t总成绩t平均成绩n"); output_stu(stu, count, flag_find-1); printf("n-"); else if (flag_find = 0) /*查找失败返回失败信息*/ printf("n对不起没有找到您的成绩!n"); else /*返回值大于0,用户选择的是学号查找方式*/ printf("n 学号tt姓名tt数据库t算法tC语

18、言t总成绩t平均成绩n"); output_stu(stu, count, -flag_find-1); printf("n-"); break;case (5): flag_find = find_stu(stu, count); /实现用户的查找功能 /*根据查找函数的返回值为用户显示查找的信息*/ if (flag_find > 0) /*返回值大于0,用户选择的是姓名查找方式*/ printf("n 学号tt姓名tt数据库t算法tC语言t总成绩t平均成绩n"); output_stu(stu, count, flag_find-1

19、); printf("n-"); else if (flag_find = 0) /*查找失败返回失败信息*/ printf("n对不起没有找到您的成绩!n"); else /*返回值大于0,用户选择的是学号查找方式*/ printf("n 学号tt姓名tt数据库t算法tC语言t总成绩t平均成绩n"); output_stu(stu, count, -flag_find-1); printf("n-"); if (flag_find != 0) /*查找成功的情况下用户可选择修改或删除操作*/ fflush(std

20、in); man_choice = getchar(); /*接收用户选择是否进行下一步操作*/ while (man_choice) /*判断用户的选择*/ printf("tt1:修改n");printf("tt2:删除n");printf("tt3:退出n");printf("n请选择您的操作");fflush(stdin); scanf("%d",&con_choice); /*用于接收用户选择的操作*/ /*根据用户的选择完成用户选择的操作*/ if (con_choice =

21、 1) /*进行修改操作*/ amend_stu(stu, count, flag_find); else if (con_choice = 2) /*进行删除操作,一旦删除则无法再进行修改*/ delete_stu(stu, count, flag_find); count-; printf("n删除成功!n"); break; else if (con_choice = 3) /*选择4则break循环退出*/ break; else /*用户输入错误信息返回用户选择有误*/ printf("您的选择有误!n"); stat_choice = 0;

22、/每次循环结束stat_choice归0 /修改删除操作结束 printf("n"); break; case (7): printf("ttt将学生成绩信息存盘:nnn"); write_text(stu, count); /*循环写入数据*/ printf("ttt"); break; case (8): printf("ttt从文件载入学生信息:nnn"); count = add_text(stu, count); /*读入文件信息*/ break; case (6): printf("ttt学生

23、成绩排名信息:n"); chenji_stu(stu, count, stat_choice);/*读入文件信息*/ printf("ttt"); break; case (0): printf("nttt确定您真的要退出吗?(y/n)"); /*提醒用户是否退出并接收选择*/ fflush(stdin); sign_main = getchar(); if (sign_main = 'y' | sign_main = 'Y') /*若用户确定退出则返回退出信息*/ printf("nnnnttt谢谢使

24、用本软件!nnnnn"); exit(0); /退出主程序 printf("nttt"); break; default: /提示用户输入错误 printf("nttt您的输入有误,请重新输入!nnttt"); system("pause"); /令屏幕暂停待输入任意键后恢复运行 system("cls"); /清屏 system("color 71"); /设置输出屏幕颜色 /* 功能:从键盘输入正确学号依次存放入stun.num中 参数:参数struct Student stud

25、代表结构体数组首地址, n代表已有成员个数,i代表本次录入的第i个学号。 返回值:空 */ void input_num(struct Student stud, int n, int i) int j; /*j用于对输入字符串的遍历*/ int k; /*k用于对是否有重复学号的判断*/ int num_flag=0; /其值作为判断录入学号是否正确的标志 while (num_flag != 2) /*如果num_flag=2则输入学号无误,终止循环*/ j = 0; /*每次循环后令j和num_flag的值为0*/ num_flag = 0; printf("ntt学号:ttt

26、"); /*首次录入学号*/ fflush(stdin); scanf("%9s", studn+i.num); while (studn+i.numj != '0') /*遍历studn+i.num*/ if (studn+i.numj < 48 | studn+i.numj > 57) /*判断输入是否错误并重新输入*/ j=0; printf("ntt请您用数字输入!请重新输入!n"); printf("ntt学号:ttt"); fflush(stdin); scanf("%9s&

27、quot;,studn+i.num); /循环结束 else /*该位输入正确则令j+*/ j+; /循环结束 num_flag+; /判断标志加1 if (n+i > 0) /*当有2个或以上的学号*/ for (k = 0; k < n+i; k+) /*令输入学号与以往录入学号比较*/ if (strcmp(studn+i.num, studk.num) = 0) /*如果存在重号则提示重新输入*/ num_flag-; /令num_flag- printf("ntt已存在这个学号!请重新输入:n"); num_flag+; else num_flag+;

28、 /*只有一个学号存在num_flag+*/ /* 功能:从键盘输入正确姓名依次存放入stun.num中 参数:参数struct Student stud 代表结构体数组首地址, n代表已有成员个数,i代表本次录入的第i个学号。 返回值:空 */ void input_name(struct Student stud, int n, int i) int j = 0; /用于遍历输入姓名 printf("ntt姓名:ttt"); /用户首次输入 fflush(stdin); scanf("%15s", studn+); while(studn

29、+j != '0') /遍历姓名对应的字符串 if ( studn+j < 65 | (studn+j > 90 && studn+j < 97) | studn+j > 122) /*如果输入格式不正确则重新输入*/ j=0; printf("ntt请您用字母输入!请重新输入!n"); printf("ntt姓名:ttt"); fflush(stdin); scanf("%15s", studn+); el

30、se /*正确则令i+*/ j+; /* 功能:从键盘输入正确成绩依次存放入stun.score中,同时计算出平均成绩 和总成绩存放入stun.score中。 参数:参数struct Student stud 代表结构体数组首地址,n代表已有成员 个数,i代表本次录入的第i个学号。 返回值:空 */ void input_score(struct Student stud, int n, int i) int j; /用于控制循环依次录入三门成绩 int h; /接收scanf()函数的返回值 int flag_score; /值作为输入有误就重复输入的循环条件 char x; /用于判断用户

31、中是否包含不合法输入 printf("ntt请输入学生成绩(1:数据库;2:算法;3:C语言):n"); for (j = 0; j < 3; j+) /*循环输入三门成绩*/ do printf("ntt第%d门:ttt", j+1); flag_score = 0; h=0; fflush(stdin); h = scanf("%f%c", &studn+i.scorej,&x); /*输入成绩并返回正确接收的次数*/ if (studn+i.scorej < 0 | studn+i.scorej &g

32、t; 100) | (h != 2) | (x != 'n') /*用户输入不合法则提示重新输入并产生循环条件*/ flag_score = -1; printf("ntt输入有误,请重新输入成绩(0-100):n"); while(flag_score < 0); /*表达式成立则输入有误循环重新输入*/ studn+i.score4 = 0; /*计算总成绩并录入*/ for(j = 0; j < 3; j+) studn+i.score4 = studn+i.score4 + studn+i.scorej; studn+i.score3 =

33、 studn+i.score4/3; /*计算平均成绩并录入*/ /* 功能:格式化输出一名学员信息 参数:参数struct Student stud 代表结构体数组首地址, n代表已有成员个数,i代表本次输出其中的第i个成员。 返回值:空 */ void output_stu(struct Student stud, int n, int i) int j; /用于控制循环依次输出三门成绩 printf(" %-10s%-15s", studi.num, ); for(j = 0; j < 3; j+) /*依次输出三门成绩*/ printf(

34、" %.1f ", studi.scorej); printf(" %.1f", studi.score4); /输出总成绩 printf(" %.1f", studi.score3); /输出平均成绩printf(" n");printf("n"); /* 功能:对某项成绩中所有元素总和求平均 参数:参数struct Student stud 代表结构体数组首地址, n代表成员个数,o代表该项成绩的下标。 返回值:某项成绩所有成员的平均值 */ float class_avr(struct S

35、tudent stud, int n, int o) int i; /用于控制for循环次数 float ach_avr = 0; /用来存放平均值 for (i = 0; i < n; i+) /*求总和*/ ach_avr = ach_avr + studi.scoreo; /累加 ach_avr = ach_avr/n; /求平均 return ach_avr; /返回平均值 /* 功能:将某项成绩的所有元素按降序排列 参数:参数*a代表结构体数组首地址,n代表调用部分包含成员个数,o代表该项成绩的下标 返回值:空 */ void desc_stu(struct Student s

36、tud, int n, int o) int i,j; /用来控制循环次数 struct Student temp; /用于交换 printf("n学号tt姓名tt分数"); for (i = 0; i < n-1; i+) /*冒泡排序*/ for(j = i+1; j < n; j+) if (studj.scoreo > studi.scoreo) /*如果j为下标的成绩大于i为下标成绩则交换*/ temp = studi; /*交换2个下标对应的所有学员信息*/ studi = studj; studj = temp; for (i = 0; i

37、< n; i+) /*输出排序后的学号姓名及排序的成绩*/ printf("n-n"); printf("%-10st%-15st%.1f", studi.num, , studi.scoreo); printf("n-n"); void chenji_stu(struct Student stud, int n, int o) int i,j; /用来控制循环次数 struct Student temp; /用于交换 printf(" nn");printf("n")

38、;printf("学号 姓名 数据库 算法 C语言总成绩 平均成绩 n");printf("n");for (i = 0; i < n-1; i+) /*冒泡排序*/ for(j = i+1; j < n; j+) if (studj.scoreo > studi.scoreo) /*如果j为下标的成绩大于i为下标成绩则交换*/ temp = studi; /*交换2个下标对应的所有学员信息*/ studi = studj; studj = temp; for (i = 0; i < n; i+) /*循环输出学员信息*/ int

39、 j; /用于控制循环依次输出三门成绩 printf(" %-10s%-15s", studi.num, ); for(j = 0; j < 3; j+) /*依次输出三门成绩*/ printf(" %.1f ", studi.scorej); printf(" %.1f", studi.score4); /输出总成绩 printf(" %.1f", studi.score3); /输出平均成绩printf(" n");printf("n"); p

40、rintf("n");/输出单个学员信息 /* 功能:对某项成绩进行统计(求平均成绩,优生人数,及格人数,优生率,及格率)并格式化输出 参数:参数*a代表结构体数组首地址,n代表调用部分包含成员个数,o代表该项成绩的下标 返回值:空 */ void stat_stu(struct Student stud, int n, int o) int i; /控制循环次数 float stat5; /用来存放5个统计数据 printf("n平均成绩t及格率tt优生率tt及格人数t优生人数n"); printf("-");stat0 = cla

41、ss_avr(stud, n, o); /调用求平均函数求出平均成绩 stat4 = 0; /*求优生人数*/ for (i = 0; i < n; i+) if (studi.scoreo >= 80) stat4+; stat3 = 0; /*求及格人数*/ for (i = 0; i < n; i+) if (studi.scoreo >= 60) stat3+; stat2 = (stat4/n)*100; /求优生率 stat1 = (stat3/n)*100; /求及格率 printf("%.1ftt%.1f%tt%.1f%tt%dtt%dn", /*格式化输出5项成绩*/ stat0, stat1, stat2, int(stat3), int(stat4); printf("-"); /* 功能:接收用户的选择分别按姓名或学号查找用户需要的信息 参数:参数struct Student stud代表结构数组首地址,n代表数组调用长度 返回值:返回值不为零则

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论