基于C语言文件操作的学生成绩管理系统
原理
在一个班级学生成绩管理系统中,希望处理每个学生的学习情况信息,其中包括学生的学号、姓名、各科名称和成绩等
并能使管理人员通过界面完成对学生信息的录入及对学生信息的录入及对数据的查找、浏览、插入、排序、保存。
要求:
1、提供用户界面
2、每一条记录包括一个学生的学号、姓名、三门课成绩、平均成绩
3、输入功能:可以一次完成若干条记录的输入
4、显示功能:完成全部学生记录的显示
5、查找功能:完成按姓名查找学生记录,并显示
6、排序功能:按学生平均成绩进行排序
7、插入功能:按平均成绩高低插入一条学生记录
8、将学生记录存在文件score中
主要数据结构
struct student
{
char No[10]; //学号
char name[20]; //姓名
int subject1; //成绩
int subject2;
int subject3;
float average; //平均成绩
};
算法分析
代码开始时定义学生管理系统所需要用到的函数,如输入、查找、排序、输出、插入等,然后逐个定义所需函数,输入函数利用循环逐个输入学生信息,查找函数利用if语句和循环进行查找,排序函数利用选择法排序将学生按平均成绩进行从小到大排序,输出函数利用文件把学生信息保存到文件中去,显示菜单函数利用system(“cls”)进行清屏然后显示菜单。
测试结果
源码
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #define N 1000
5 struct student
6 {
7 char No[10]; //学号
8 char name[20]; //姓名
9 int subject1; //成绩
10 int subject2;
11 int subject3;
12 float average; //平均成绩
13 };
14 int p=1;//判断是否有数据
15 int n=0;
16 struct student *stu=NULL;
17 void menu(); //菜单
18 void input(); //输入学生信息
19 void sort();
20 void fileoutput(); //输出学生信息
21 void find();
22 void show();
23 void insert();
24 void fileinput();
25 int main()
26 {
27 fileinput();//从文件读取数据
28 int flag;
29 int first=0;
30 if(p==0)
31 {
32 printf("首先请输入学生人数\n");
33 scanf("%d",&n);
34 }
35 if(p==0)
36 printf("\n初次选择,输入请选择 0:");
37 else
38 printf("已有数据,请选择其他操作,若要重新输入,请选择 0:");
39 while(1)
40 {
41 menu();
42 if(first==1)
43 printf("\n请继续选择操作的序号:");
44 else
45 first++;
46 scanf("%d",&flag);
47 if(flag ==-1)
48 break;
49 switch(flag)
50 {
51 case 0:input();break;//输入n个学生成绩
52 case 1:find();break;//输入学生姓名查找
53 case 2:sort();break;//将学生成绩从小到大排序
54 case 3:show();break;//显示所有学生成绩
55 case 4:insert();break;//按平均成绩高低插入一条学生记录
56 case 5:system("cls");break;//调出菜单
57 default:printf("本次选择不成功!\n");
58 }
59 }
60 fileoutput();//将所有学生成绩保存到score文件中
61 }
62 void menu()//菜单
63 {
64 printf("\n");
65 printf(" 学生管理系统 \n");
66 printf("***************************************************\n");
67 printf("* 请选择操作的序号,如果输入-1,程序结束 *\n");
68 printf("* *\n");
69 printf("* 0 输入n个学生信息 1 输入学生姓名查找 *\n");
70 printf("* *\n");
71 printf("* 2 将学生成绩从小到大排序 3 显示所有学生成绩 *\n");
72 printf("* *\n");
73 printf("* 4 插入一条学生记录 5 显示菜单 *\n");
74 printf("* *\n");
75 printf("***************************************************\n");
76 }
77 void input()//输入n个学生成绩
78 {
79 system("cls"); //清屏
80 int i,num=1;
81 char a[10];
82 stu = (struct student*)malloc(sizeof(struct student)*n);
83 for(i=0;i<n;i++)
84 {
85 printf("请输入第%d个学生的信息:\n",num);
86 num++;
87 gets(a);//防止回车键占用学号位置;
88 printf("学号:");
89 gets(stu[i].No);
90 printf("姓名:");
91 gets(stu[i].name);
92 printf("三科成绩:\n");
93 scanf("%d%d%d",&stu[i].subject1,&stu[i].subject2,&stu[i].subject3);
94 stu[i].average=stu[i].subject1+stu[i].subject2+stu[i].subject3;
95 stu[i].average=stu[i].average/3;
96 }
97 printf("一共%d个学生信息输入完毕\n",n);
98 }
99 void find()//输入学生姓名查找并输出该学生信息
100 {
101 system("cls"); //清屏
102 printf("请输入要查找的学生姓名:");
103 char a[10];
104 gets(a);//防止回车键占用学号位置;
105 char name[20];
106 gets(name);
107 int i,j=1001;
108 for(i=0;i<n;i++)
109 {
110 if((strcmp(name,stu[i].name))==0)
111 j=i;
112 }
113 if(j==1001)
114 printf("没有此学生!\n");
115 else
116 {
117 printf("成功已找到此姓名的学生\n");
118 printf("学号:");
119 puts(stu[j].No);
120 printf("姓名:");
121 puts(stu[j].name);
122 printf("三科成绩:%d %d %d\n平均成绩:%.2f\n",stu[j].subject1,stu[j].subject2,stu[j].subject3,stu[j].average);
123 }
124 }
125 void sort()//将学生成绩从小到大排序
126 {
127 system("cls"); //清屏
128 struct student t;
129 int min;
130 int i,j,num;
131 for(j=0;j<n;j++)
132 {
133 min=stu[j].average;
134 num=j;
135 for(i=j;i<n;i++)
136 {
137 if(stu[i].average<min)
138 {
139 num=i;
140 min=stu[i].average;
141 }
142 }
143 t=stu[j];
144 stu[j]=stu[num];
145 stu[num]=t;
146 }
147 show();
148 printf("已按照平均成绩从低到高排序完毕!\n");
149 }
150 void fileoutput()//将所有学生成绩输出到score文件中
151 {
152 system("cls"); //清屏
153 char filename[]={"score.txt"};
154 FILE *in;
155 if((in=fopen(filename,"w"))==NULL)
156 printf("无法打开此文件\n");
157 else
158 {
159 int i;
160 fprintf(in,"%d\n",n);
161 for(i=0;i<n;i++)
162 fwrite(&stu[i],sizeof(struct student),1,in);
163 fclose(in);
164 printf("已成功将学生记录保存于score文件中\n");
165 }
166 free(stu);
167 stu = NULL;
168 }
169 void show()//显示所有学生成绩
170 {
171 system("cls"); //清屏
172 printf("以下是所有学生信息:\n");
173 int i;
174 for(i=0;i<n;i++)
175 {
176 printf("学号:");
177 puts(stu[i].No);
178 printf("姓名:");
179 puts(stu[i].name);
180 printf("三科成绩:%d %d %d\n平均成绩:%.2f\n",stu[i].subject1,stu[i].subject2,stu[i].subject3,stu[i].average);
181 printf("\n");
182 }
183 }
184 void insert()//按平均成绩高低插入一条学生记录
185 {
186 system("cls"); //清屏
187 struct student *newbase = (struct student *)realloc(stu,sizeof(struct student)*(n+1));
188 stu = newbase;
189
190 int *m=&n;
191 printf("请输入要插入的学生的信息:\n");
192 struct student stu1;
193 char a[10];
194 gets(a);//防止回车键占用学号位置;
195 printf("学号:");
196 gets(stu1.No);
197 printf("姓名:");
198 gets(stu1.name);
199 printf("三科成绩:\n");
200 scanf("%d%d%d",&stu1.subject1,&stu1.subject2,&stu1.subject3);
201 stu1.average=stu1.subject1+stu1.subject2+stu1.subject3;
202 stu1.average=stu1.average/3;
203 int num;
204 int i;
205 for(i=1;1;i++)
206 {
207 if(stu1.average<stu[0].average)
208 {
209 num=0;
210 break;
211 }
212 else if(stu1.average>stu[*m-1].average)
213 {
214 num=*m;
215 break;
216 }
217 else if(stu[i-1].average<stu1.average&&stu1.average<stu[i].average)
218 {
219 num=i;
220 break;
221 }
222 }
223 struct student t;
224 for(i=*m-1;i>=num;i=i-1)//将num后的向后平移一个
225 {
226 stu[i+1]=stu[i];
227 }
228 stu[i+1]=stu1;
229 *m=*m+1;
230
231 show();
232 printf("已成功插入该学生的信息\n");
233 }
234 void fileinput()//从文件中读取数据
235 {
236 system("cls"); //清屏
237 char filename[]={"score.txt"};
238 FILE *in;
239 if((in=fopen(filename,"r"))==NULL)
240 {
241 printf("无法读取数据\n");
242 p=0;
243 }
244 else
245 {
246 fscanf(in,"%d\n",&n);
247 stu = (struct student*)malloc(sizeof(struct student)*n);
248 int i;
249 for(i=0;i<n;i++)
250 fread(&stu[i],sizeof(struct student),1,in);
251 fclose(in);
252 printf("已成功从score文件中将学生记录读取\n");
253 }
254 }
基于C语言文件操作的学生成绩管理系统的更多相关文章
- [项目记录] 用c语言完成的一个学生成绩管理系统
一.要求: 学生成绩管理系统 某班有最多不超过30人(具体人数由键盘输入)参加期末考试,最多不超过6门(具体门数由键盘输入).使用链表编程实现如下菜单驱动的学生成绩管理系统. 从文件读入每个学生个人信 ...
- C项目实践--学生成绩管理系统
1.功能需求分析 学生成绩管理系统是对学生基本信息及成绩的管理.本程序主要实现了对学生的学号.姓名等基本信息以及各项学科成绩进行增加.删除.修改.查询和保存到磁盘文件等操作.主要功能描述如下: (1) ...
- JSP+SSM+Mysql实现的学生成绩管理系统
项目简介 项目来源于:https://gitee.com/z77z/StuSystem 本系统是基于JSP+SSM+Mysql实现的学生成绩管理系统.主要实现的功能有教师管理.学生管理.课程管理.学生 ...
- 【学生成绩管理系统】 大二c语言作业
几年前写的了,只能在命令行窗口运行,虽然比较挫,还是有一定参考价值... #include <cstdio> #include <conio.h> #include <i ...
- C语言实现---学生成绩管理系统
C语言实现了学生成绩管理系统,可以进行学生成绩的增加,删除,更新,查询,计算和展示. 完整代码如下: #include<stdio.h> #include<stdlib.h> ...
- 第一次写C语言小程序,可以初步理解学生成绩管理系统的概念
1 成绩管理系统概述 1.1 管理信息系统的概念 管理信息系统(Management Information Systems,简称MIS),是一个不断发展的新型学科,MIS的定义随着科技的进步也在 ...
- 基于MFC的学生成绩管理系统的设计与实现
1.技术介绍MFC是微软基础类库的简称,是微软公司实现的一个C++类库,主要封装了大部分的WINDOWS API函数,并且包含一个应用程序框架,以减少应用程序开发人员工作量.VC++是微软公司开发的C ...
- 学生成绩管理系统(C++指针、链表、文件及面向对象的运用)
学生成绩管理系统 功能页面显示: 实现源码: #include<iostream> #include<fstream> #include<cstring> # ...
- go语言文件操作,这期资料比较详细( 欢迎加入go语言群: 218160862 )
go语言文件操作,这期资料比较详细 欢迎加入go语言群: go语言深圳群 golang深圳 218160862 点击加入 文件操作 func Open(name string) (file *File ...
随机推荐
- hdu4912 LCA+贪心
题意: 给你一棵树和m条边,问你在这些边里面最多能够挑出多少条边,使得这些边之间不能相互交叉. 思路: lca+贪心,首先对于给的每个条边,我们用lca求出他们的公共节点,然后在 ...
- 如何以最简单的方式安装 KALI 渗透测试框架系统
0x01 第一步下载 KALI 百度搜索 KALI 官网,找到下载区,我选的是 64 位标准版,但是推荐下载 32 位(功能貌似更全) 这个为下载后的 iso 镜像文件 0x02 第二步打开虚拟机,配 ...
- CVE-2012-3569:VMware OVF Tool 格式化字符串漏洞调试分析
0x01 简介 VMware OVF Tool 是一个命令行实用程序,允许您从许多 VMware 产品导入和导出 OVF 包.在 2.1.0 - 2.1.3 之间的版本中存在格式化字符串漏洞,通过修改 ...
- Windows系统应急响应
Windows 系统的应急事件,按照处理的方式,可分为下面几种类别: 病毒.木马.蠕虫事件 Web 服务器入侵事件 或 安装的第三方服务入侵事件. 系统入侵事件,如利用 Windows 的漏洞攻击入侵 ...
- Windows核心编程 第四章 进程(下)
4.3 终止进程的运行 若要终止进程的运行,可以使用下面四种方法: • 主线程的进入点函数返回(最好使用这个方法) . • 进程中的一个线程调用E x i t P r o c e s s函数(应该避免 ...
- 百度地图api根据用户IP获取用户位置(PHP)
1.百度地图开放平台找的你的ak ,链接:http://lbsyun.baidu.com/apiconsole/key 2.获取用户ip地址(外网ip 服务器上可以获取用户外网Ip 本机ip地址只能获 ...
- Spring Boot & Cloud 轻量替代框架 Solon 1.4.1 发布
Solon 是一个微型的Java开发框架.强调,克制 + 简洁 + 开放的原则:力求,更小.更快.更自由的体验.支持:RPC.REST API.MVC.Micro service.WebSocket. ...
- 四种方式带你层层递进解剖算法---hash表不一定适合寻找重复数据
一.题目描述 找出数组中重复的数字 > 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次. ...
- KMP板子(其实还没完全懂...)
KMP模板 1.next数组的实际含义 next数组从-1开始,主串a,子串b,next[j]=k,满足b[0,k-1]==b[j-k,j-1],k同时也为b子串前缀的下标,j为b子串后缀的下标 ge ...
- [MySQL数据库之表的约束条件:primary key、auto_increment、not null与default、unique、foreign key:表与表之间建立关联]
[MySQL数据库之表的约束条件:primary key.auto_increment.not null与default.unique.foreign key:表与表之间建立关联] 表的约束条件 约束 ...