原理

在一个班级学生成绩管理系统中,希望处理每个学生的学习情况信息,其中包括学生的学号、姓名、各科名称和成绩等
并能使管理人员通过界面完成对学生信息的录入及对学生信息的录入及对数据的查找、浏览、插入、排序、保存。
要求:
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语言文件操作的学生成绩管理系统的更多相关文章

  1. [项目记录] 用c语言完成的一个学生成绩管理系统

    一.要求: 学生成绩管理系统 某班有最多不超过30人(具体人数由键盘输入)参加期末考试,最多不超过6门(具体门数由键盘输入).使用链表编程实现如下菜单驱动的学生成绩管理系统. 从文件读入每个学生个人信 ...

  2. C项目实践--学生成绩管理系统

    1.功能需求分析 学生成绩管理系统是对学生基本信息及成绩的管理.本程序主要实现了对学生的学号.姓名等基本信息以及各项学科成绩进行增加.删除.修改.查询和保存到磁盘文件等操作.主要功能描述如下: (1) ...

  3. JSP+SSM+Mysql实现的学生成绩管理系统

    项目简介 项目来源于:https://gitee.com/z77z/StuSystem 本系统是基于JSP+SSM+Mysql实现的学生成绩管理系统.主要实现的功能有教师管理.学生管理.课程管理.学生 ...

  4. 【学生成绩管理系统】 大二c语言作业

    几年前写的了,只能在命令行窗口运行,虽然比较挫,还是有一定参考价值... #include <cstdio> #include <conio.h> #include <i ...

  5. C语言实现---学生成绩管理系统

    C语言实现了学生成绩管理系统,可以进行学生成绩的增加,删除,更新,查询,计算和展示. 完整代码如下: #include<stdio.h> #include<stdlib.h> ...

  6. 第一次写C语言小程序,可以初步理解学生成绩管理系统的概念

    1 成绩管理系统概述 1.1  管理信息系统的概念  管理信息系统(Management Information Systems,简称MIS),是一个不断发展的新型学科,MIS的定义随着科技的进步也在 ...

  7. 基于MFC的学生成绩管理系统的设计与实现

    1.技术介绍MFC是微软基础类库的简称,是微软公司实现的一个C++类库,主要封装了大部分的WINDOWS API函数,并且包含一个应用程序框架,以减少应用程序开发人员工作量.VC++是微软公司开发的C ...

  8. 学生成绩管理系统(C++指针、链表、文件及面向对象的运用)

    学生成绩管理系统 功能页面显示:    实现源码: #include<iostream> #include<fstream> #include<cstring> # ...

  9. go语言文件操作,这期资料比较详细( 欢迎加入go语言群: 218160862 )

    go语言文件操作,这期资料比较详细 欢迎加入go语言群: go语言深圳群 golang深圳 218160862 点击加入 文件操作 func Open(name string) (file *File ...

随机推荐

  1. [转]自建CDN防御DDoS

    自建CDN防御DDoS(1):知己知彼,建设持久防线 前言 本议题是我们在OWASP杭州区2013年岁末年初安全沙龙中进行分享的内容,在此我们对这个议题的整体内容进行了重新归纳梳理,形成了文字版. 在 ...

  2. FreeSql之Expression表达式拼接参数扩展

    在FreeSql源码中Expression表达式拼接默认最多支持到5个泛型参数,当我们使用表关联比较多的时候,就需要进行扩展. 新建一个类,将命名空间改为System.Linq.Expressions ...

  3. 【maven】IDEA工程右边的maven配置中Plugins有重复的命令

    问题 解决 换一个IDEA的版本,比如2020.02 参考链接 https://ask.csdn.net/questions/1060938 https://bbs.csdn.net/topics/3 ...

  4. 一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第n次落地时,共经过多少米?第n次反弹多高?(n<=10)

    单纯考逻辑 题目: 一球从100米高度自由落下,每次落地后反跳回原高度的一半:再落下,求它在第n次落地时,共经过多少米?第n次反弹多高?(n<=10) 输入描述: 一行,一个整数n (1< ...

  5. liunx中文件夹不能删除怎么操作

    1.运行rm -rf 文件名称 2.不能删除对应文件并且提示"rm: cannot remove './.user.ini': Operation not permitted" 操 ...

  6. 标签页切换title改变

    js实现如下 并将代码加入博客侧边栏就成了 <script> document.addEventListener("visibilitychange", functio ...

  7. Spring的安装

    Spring的安装 Spring框架包 spring-framework-4.3.6RELEASE-dist.zip http://repo.spring.io/simple/libs-release ...

  8. 基于任务的异步编程(Task,async,await)

    这节讲一下比较高级的异步编程用法Task,以及两个异步关键字async和await. Task是在C#5.0推出的语法,它是基于任务的异步编程语法,是对Thread的升级,也提供了很多API,先看一下 ...

  9. Mybatis学习之自定义持久层框架(六) 自定义持久层框架:完善CRUD方法并进行测试

    前言 没想到会等到半年以后才来写这篇文章,我已经不记得当初自己想要在这篇文章中写什么了,还好有一些零散的笔记留着,就对照着上一篇文章及零散的笔记,把内容给补充完吧. 完善CRUD方法 完善Defaul ...

  10. 使用git rebase去掉无谓的融合

    git pull 預設的行為是將遠端的 repo. 與本地的 repo. 合併,這也是 DVCS 的初衷,將兩個 branch 合併.但是,很多時候會發生以下這種情形: 這是因為,我們團隊的開發模式是 ...