基于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 ...
随机推荐
- 在Android的App中动态的加载Java类
原文的地址:http://yenliangl.blogspot.com/2009/11/dynamic-loading-of-classes-in-your.html 我正在编写一个应用程序能够加载别 ...
- hdu4911 简单树状数组
题意: 给你一串数字,然后给你最多进行k次交换(只能交换相邻的)问交换后的最小逆序数是多少. 思路: 首先要知道的一个就是给你一个序列,每次只能交换相邻的位置,把他交换成一个递增序 ...
- Swift系列三 - 函数
函数在任何语言中都是存在的,Swift中函数更加灵活. 一.函数的定义 1.1. 有返回值(形参默认是let,也只能是let) func pi() -> Double { return 3.14 ...
- 详解 WebRTC 传输安全机制:一文读懂 DTLS 协议
作者|进学 审校|泰一 DTLS (Datagram Transport Layer Security) 基于 UDP 场景下数据包可能丢失或重新排序的现实情况下,为 UDP 定制和改进的 TLS 协 ...
- 通过例子分析MVVM
通过一个简单的计数器例子分析MVVM. 代码 demo2.html <!DOCTYPE html> <html lang="en"> <head> ...
- json的解析和生成
相比于xml,json的主要特点是数据小,解析速度快,但是描述性差. java中常见的json解析方法有Gson.Jackson.JSON.simple. 从解析速度上来看,Gson适合解析小数据量, ...
- 简单使用高德地图开放平台API
需求说明 输入经纬度,得到城市名 挑选API 使用高德逆地理编码API,点击查看文档 demo <?php /** * 根据输入的经纬度返回城市名称 * @param $longitude 终点 ...
- VS里的 代码片段(Code snippet)很有用,制作也很简单
工欲善其事必先利其器,而 Visual Studio 就是我们的开发利器. 上一篇文章,介绍了一个很棒的快捷键,如果你还没用过这个快捷键,看完之后应该会豁然开朗.如果你已经熟练的应用它,也会温故而知新 ...
- ALPHA任务拆解
项目 内容 这个作业属于哪个课程 BUAA2020软件工程 这个作业的要求在哪里 作业要求 我们在这个课程的目标是 学会团队合作,共同开发一个完整的项目 这个作业在哪个具体方面帮助我们实现目标 团队任 ...
- 为什么数字被int格式化后依旧可以用%s占位(勉强已答)
为什么数字被int格式化后依旧可以用%s占位 答:可以看作str(obj)