c语言将学生id和成绩记录在文本文件"score.txt"中,从文件中读取学生信息和分数,求出平均分后升序写入另一个文件。...

本文展示了如何使用Java编程实现从文本文件'score.txt'中读取学生ID和C语言成绩,计算平均分,并按升序将结果写入'scoreSort.txt'。代码包括Student类,用于存储学生信息;ReadData类,用于读取和处理数据;以及Main类,用于执行整个流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Student类,代码如下:

package student;

import java.text.DecimalFormat;

public class Student {

private int id;//学号

private String name;//姓名

private int score1;//成绩1

private int score2;//成绩1

private int score3;//成绩1

private double avg;//平均值

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getScore1() {

return score1;

}

public void setScore1(int score1) {

this.score1 = score1;

}

public int getScore2() {

return score2;

}

public void setScore2(int score2) {

this.score2 = score2;

1.功能需求 某班有最多不超过30人(具体人数由键盘输人)参加期末考试,最多不超过6门(具体门数由键盘输入)。请使用结构体数组、排序查找算法以及模块化程序设计方法编程实现如下菜单驱动的学生成绩管理系统: (1)输入每个学生学号、姓名若干门课程考试成绩; (2)计算每门课程的总分平均分; (3)计算每个学生的总分平均分; (4)按每个学生的总分由高到低排出名次表; (5)按每个学生的总分由低到高排出名次表; (6)按学号由小到大排出成绩表; (7)按姓名的字典顺序排出成绩表; (8)按学号查询学生排名及其考试成绩; (9)按姓名查询学生排名及其考试成绩; (10)按优秀(90~100)、良好(80~89)、中等(70~79)、及格(60~69)、不及格(0~59)5个类别,对每门课程分别统计每个类别的人数以及所占的百分比; (11)输出每个学生学号、姓名、各科考试成绩,以及总分平均分; (12)将每个学生记录信息写入文件; (13)从文件中读出每个学生记录信息并显示; 以下为选做功能: (14)向文件中追加1条记录; (15)删除文件中指定学号记录; (16)修改文件中的某个学生的某门功课的成绩。 2.数据需求 每条记录包含学号(长整型)、姓名(字符串)、多门课程的成绩(浮点型)、总成绩(浮点型)、平均成绩(浮点型)。 数据存储于文件StudentRecord.txt中,格式为每行一条记录文件的第一行数据为学生人数课程门数。 3.性能需求 系统响应快速,支持至少100条记录的高效处理。 界面友好,操作直观,提供菜单驱动交互。 三、系统设计 1.总体设计 模块划分: 系统采用模块化设计:每个功能模块封装为独立函数;全局数据通过结构体数组统一管理。 主菜单模块:提供功能入口,循环调用各子模块。 具体菜单要求如下: 1.Input record 2.Calculate total and average score of every course 3.Calculate total and average scored of every student 4.Sort in descending order by total score of every student 5.Sort in ascending order by total score of every student 6.Sort in ascending order by number 7.Sort in dictionary order by name 8.Search by number 9.Search by name 10.Statistic analysis for every course 11.List record 12.Write to a file 13.Read from a file 0.Exit Please enter your choice: 数据输入模块:实现学生信息由键盘录入与验证。 数据处理模块:对结构体数组stu进行按条件查询、排序。 文件操作模块:实现对文件中的数据进行读写、增删改等操作。2.数据结构设计 定义结构体Student: typedef struct Student { long num; // 学号 char name[MAX_LEN]; // 姓名 float score[COURSE_NUM]; // 多门课程的成绩 float sum; //每个学生的总分 float aver; // 平均成绩 }STU; 3.算法设计 排序算法:选择排序实现按平均分排序。 查询算法:线性查找实现按学号/姓名查询。 四、系统实现 1.主函数流程 int main(void) { char ch; int n = 0,m = 0; STU stu[STU_NUM]; printf("Input student number(n<%d):",STU_NUM); scanf("%d",&n); printf("Input course number(m<=%d):",COURSE_NUM); scanf("%d",&m); while(1) { ch = Menu(); //显示菜单,并读取用户输入 switch(ch) { case 1 : ReadScore(stu,n,m); break; case 2: AverSumofEveryCourse(stu,n,m); break; case 3: AverSumofEveryStudent(stu,n,m); break; case 4: SortbyScore(stu,n,m,Descending); printf("\nSort in descending order by score:\n"); PrintScore(stu,n,m); break; case 5: SortbyScore(stu,n,m, Ascending); printf("\nSort in ascending order by score:\n"); PrintScore(stu,n,m); break; case 6: AsSortbyNum(stu,n,m); printf("\nsort in ascending order by number:\n"); PrintScore(stu,n,m); break; case 7: SortbyName(stu,n,m); printf("\nSort in dictionary order by name:\n"); PrintScore(stu,n,m); break; case 8: SearchbyNum(stu,n,m); break; case 9: SearchbyName(stu,n,m); break; case 10:StatisticAnalysis(stu,n,m); break; case 11:PrintScore(stu,n,m); break; case 12:WritetoFile(stu,n,m); break; case 13:ReadfromFile(stu,&n,&m); break; case 0:printf("End of program!"); exit(0); default:printf("Input error!"); } } return 0; } 2.各功能函数实现 (1)输入每个学生学号、姓名若干门课程考试成绩; (2)计算每门课程的总分平均分; (3)计算每个学生的总分平均分; (4)按每个学生的总分由高到低排出名次表; //按选择法将结构体数组stu的元素按总分升(降)序排序 void SortbyScore(STU stu[],int n,int m,int (*compare)(float a,float b)) { int i,j,k,t; for(i=0;i<n-1;i++) { k=i; for(j=i+1;j<n;j++) { if((*compare)(stu[j].sum,stu[k].sum)) k=j; } if(k!=i) { //说明:可整体交换两个结构体数组元素,也可以数组元素各成员逐一交换 } } } //使数据按升序排序 int Ascending(float a,float b) { return a<b; //这样比较决定了按升序排序,如果a<b, 则交换 } //使数据按降序排序 int Descending(float a,float b) { return a>b; //这样比较决定了按降序排序,如果a>b、则交换 } (5)按每个学生的总分由低到高排出名次表; (6)按学号由小到大排出成绩表; (7)按姓名的字典顺序排出成绩表; (8)按学号查询学生排名及其考试成绩; (9)按姓名查询学生排名及其考试成绩; (10)按优秀(90~100)、良好(80~89)、中等(70~79)、及格(60~69)、不及格(0~59)5个类别,对每门课程分别统计每个类别的人数以及所占的百分比; (11)输出每个学生学号、姓名、各科考试成绩,以及总分平均分; (12)将每个学生记录信息写入文件; (13)从文件中读出每个学生记录信息并显示; 五、测试与调试 1.测试用例 正常输入:输入有效学号、姓名及成绩,验证排序与查询功能。 异常输入:输入非数字成绩,验证错误提示机制。 说明: 1)可以使用多张测试用例表,对不同的功能模块进行测试。在测试用例表中给出正常与异常的测试数据进行功能测试。 2)也可以给出正常或异常测试的运行结果截图 2.调试问题 文件读写错误:文件路径错误→统一使用相对路径并检查权限。
最新发布
06-19
学生信息管理系统设计 (1)问题描述 学生信息包括:学号、姓名、性别、宿舍号码、电话号码、成绩等。试设计一个学生信息管理系统,使之能提供以下功能: ² 系统以菜单方式工作 ² 学生信息录入功能(学生信息文本文件保存)---输入 ² 学生信息浏览功能——输出 ² 查询功能——算法 1、按学号查询 2、按姓名查询 ² 排序功能 1、按分数升序排序 2、按分数降序排序 (2)功能要求 ² 界面简单明了; ² 有一定的容错能力,比如输入的成绩不在0~100之间,就提示不合法,要求重新输入; (3)算法分析 首先,一个学生包括这么多的属性,应该考虑定义一个结构,其次,我们应该考虑数据的存储形式,在这里假如我们以数组的方式来存储,首先必须知道学生人数大概是多少,以便我们确定数组的大小。 对于菜单的实现,其实也比较简单,首先我们用printf语句把程序的功能列出来,然后等待用户输入而执行不同的函数,执行完了一个功能后又回到菜单。文件的读写操作大家参照书中的有关文件的章节。 (4)保存在文件中的内容可以参考下面的形式 学号 姓名 性别 宿舍号码 电话号码 成绩 01 张成成 男 501 87732111 90 02 李成华 女 101 87723112 78 03 王成凤 女 101 87723112 85 04 张明明 男 502 87734333 60 05 陈东 男 501 87732111 96 06 李果 男 502 87734333 66 07 张园园 女 102 87756122 80 … … … … … …C语言设计
06-09
纯C语言学生成绩管理系统(以包含文件的形式写的),结构体,链表,数组,以下是main.c #include #include #include #define m 3/*宏定义m的值为3*/ struct node/*链表初始化*/ { char name[20]; int no; float score[m]; float sum; float avg; struct node *next; }; char ch[m+4][20]={{"学号"},{"姓名"},{"语文"},{"数学"},{"英语"},{"总分"},{"平均分"}};/*定义并初始化一个全局二维字符数组*/ #include "save.c"/*包含保存文件*/ #include "read.c"/*包含读取文件*/ #include "output.c"/*包含打印文件*/ #include "set.c"/*包含录入文件*/ #include "demand.c"/*包含查询文件*/ #include "sort.c"/*包含排序文件*/ #include "modified.c"/*包含修改文件*/ #include "add.c"/*包含添加文件*/ #include "del.c"/*包含删除文件*/ void main() { int n; printf("\n\t\t\t欢迎使用学生成绩管理系统\n\n"); printf("\t\t\t\t\t\t制 作: XIA XIA\n"); do { printf("\n\n1:学生成绩录入,并保存\n"); printf("2:学生成绩查询\n"); printf("3:学生成绩的排序\n"); printf("4:学生成绩的修改\n"); printf("5:学生成绩的打印\n"); printf("6:学生信息的添加\n"); printf("7:学生信息的删除\n"); printf("0:退出学生成绩管理系统\n\n\n"); printf("输入你要执行操作的相应序号\n"); scanf("%d",&n);/*输入相就的操作的序号*/ switch (n) { case 1: set();break;/*调用录入函数*/ case 2: demand();break;/*调用查询函数*/ case 3: sort();break;/*调用排序函数*/ case 4: modified();break;/*调用修改函数*/ case 5: output();break;/*调用打印函数*/ case 6: add();break;/*调用添加函数*/ case 7: del();break;/*调用删除函数*/ case 0: printf("正在退出学生成绩管理系统......\n");exit(0);/*直到输入“0”退出学生成绩管理系统*/ default:printf("输入错误码,请重新输入\n"); } }while(1); }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值