简单的学生管理(C语言)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct Student_type{
char name[13];
char stuNo[12];
float score[3];
float sum;
}stu[20];
//向文件stuInfo.txt中输入信息保存学生信息 (追加)
void save1(int t){
FILE *fp;
int i;
fp = fopen("stuInfo.txt","a"); //D:\\C语言\\学生信息\\stuInfo.txt
if(fp==NULL){ //先判断是否存在这个文件,存在再进行下一步操作
printf("Can't open file");
exit(0);
}
printf("请输入学生信息(姓名,学号,语文成绩,数学成绩,英语成绩。每组数据之间以空格分开,每位学生换行输入):\n");
for(i=0;i<t;i++){ //获取追加的学生信息
scanf("%s %s %f %f %f",stu[i].name,stu[i].stuNo,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
stu[i].sum=stu[i].score[0]+stu[i].score[1]+stu[i].score[2];
} for(i=0;i<t;i++){ //把学生信息写入文件
fprintf(fp,"%s %s %f %f %f %f\n",stu[i].name,stu[i].stuNo,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].sum); }
fclose(fp);
}
//向文件stuInfo.txt中输入信息保存学生信息 (重写)
/*
C语言中,文件打开方式有多种。其中常用三种,
1. 'r'方式打开的文件只可以读,只能向计算机输入数据,且这个文件必须是存在的。
'r+'方式打开的文件可以读也可以写。
2. 'w'方式打开的方式只可以写,只能用于向打开的文件写数据.
如果这个文件不存在,计算机会建立一个以指定名字命名的文件。
如果这个文件存在,先把这个文件删除在重新建立一个以指定名字命名的文件。
'w+'方式打开的文件可读可写。
3. 'a'方式打开的只可以写,只能用于向打开的文件写数据.
如果文件不存在,出错。
如果文件存在,光标自动移动到文件末尾。
4.用'r+'方式打开的文件可以读也可以写。 文件一存在,方便读写。
用'w+'方式打开则是县新建一个文件,先向文件写入数据,再从文件中读取数据。
'a+'方式打开的文件可读可写。原来的文件不会被删除,文件读写文职标记移动到文件末尾,可以添加也可以读。 */
void save2(int t){
FILE *fp;
int i;
fp = fopen("stuInfo.txt","w");
printf("请输入学生信息(姓名,学号,成绩,成绩,成绩。每组数据之间以空格分开,每位学生换行输入):\n");
for(i=0;i<t;i++){
scanf("%s %s %f %f %f",stu[i].name,stu[i].stuNo,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
stu[i].sum=stu[i].score[0]+stu[i].score[1]+stu[i].score[2];
}
if(fp==NULL){
printf("Can't open file");
exit(0);
}
for(i=0;i<t;i++){
fprintf(fp,"%s %s %f %f %f %f\n",stu[i].name,stu[i].stuNo,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].sum); }
fclose(fp);
}
//从文件stuInfo .txt中获取信息并打印
void show(int count){
FILE *fp;
int i;
fp = fopen("stuInfo.txt","r");
if(fp==NULL){
printf("Can't open file");
system("pause");
exit(0);
}
printf( " 姓名 学号 语文 数学 英语 总分\n");
for(i=0;i<count;i++){
fscanf(fp,"%s %s %f %f %f %f",stu[i].name,stu[i].stuNo,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2],&stu[i].sum);
printf("%15s %12s %10f %10f %10f %10f\n",stu[i].name,stu[i].stuNo,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].sum);
}
fclose(fp);
} //对文件里的数据进行排序兵重写
void order(int count){
struct Student_type temp;
FILE *fp;
int i,j,max;
fp = fopen("stuInfo.txt","w+");
if(fp==NULL){
printf("Can't open file");
exit(0);
}
for(i=0;i<count;i++){
fscanf(fp,"%s %s %f %f %f %f",stu[i].name,stu[i].stuNo,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2],&stu[i].sum);
}
for(i=0;i<count;i++){
max = i;
for(j=i+1;j<count;j++){
if(stu[j].sum>stu[max].sum){
max = j;
}
}
temp = stu[i];
stu[i]=stu[max];
stu[max]= temp; printf("============%f\n",stu[i].sum);
}
/* for(i=0;i<count;i++){
printf("%15s %12s %10f %10f %10f %10f\n",stu[i].name,stu[i].stuNo,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].sum);
}*/
for(i=0;i<count;i++){
fprintf(fp,"%s %s %f %f %f %f\n",stu[i].name,stu[i].stuNo,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].sum);
}
}
//主菜单
void menu(){
printf("========菜单========\n");
printf("1.添加学生信息\n");
printf("2.查找学生信息\n");
printf("3.展示所有学生信息\n");
printf("4.排序\n");
printf("5.修改学生信息\n");
printf("0.退出\n");
}
//副菜单
void menu2(){
printf("1.按学号查找\n");
printf("2.按姓名查找\n");
}
//副菜单
void menu3(){
printf("1.重写学生信息\n");
printf("2.追加学生信息\n");
}
//按学号查找
void check1(int count){
FILE *fp;
int i,j,k=-1;
char vivo[12];
fp = fopen("stuInfo.txt","r");
printf("请输入学号:");
scanf("%s",vivo);
if(fp==NULL){
printf("Can't open file");
system("pause");
exit(0);
}
for(i=0;i<count;i++){
fscanf(fp,"%s %s %f %f %f %f",stu[i].name,stu[i].stuNo,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2],&stu[i].sum);
if(strcmp(stu[i].stuNo,vivo)==0){
k=i;
}
if(k>=0){
printf( " 姓名 学号 语文 数学 英语 总分\n");
printf("%15s %12s %10f %10f %10f %10f\n",stu[k].name,stu[k].stuNo,stu[k].score[0],stu[k].score[1],stu[k].score[2],stu[k].sum);
break;
} }
if(k<0){
printf("对不起,你要查找的学生不存在!\n");
} fclose(fp); }
//按姓名查找
void check2(int count){
FILE *fp;
int i,j,k=-1;
char oppo[15];
fp = fopen("stuInfo.txt","r");
printf("请输入姓名:");
scanf("%s",oppo);
if(fp==NULL){
printf("Can't open file");
system("pause");
exit(0);
}
for(i=0;i<count;i++){
fscanf(fp,"%s %s %f %f %f %f",stu[i].name,stu[i].stuNo,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2],&stu[i].sum);
if(strcmp(stu[i].name,oppo)==0){
k=i;
}
if(k>=0){
printf( " 姓名 学号 语文 数学 英语 总分\n");
printf("%15s %12s %10f %10f %10f %10f\n",stu[k].name,stu[k].stuNo,stu[k].score[0],stu[k].score[1],stu[k].score[2],stu[k].sum);
break;
} }
if(k<0){
printf("对不起,你要查找的学生不存在!\n");
}
fclose(fp); }
//修改学生信息
void update(int count){
FILE *fp;
int i,j,k;
char oppo[12];
fp = fopen("stuInfo.txt","w+");
printf("请输入学号或者姓名:");
scanf("%s",oppo);
if(fp==NULL){
printf("Can't open file");
}
for(i=0;i<2;i++){
fscanf(fp,"%s %s %f %f %f %f",stu[i].name,stu[i].stuNo,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2],&stu[i].sum);
k= -1;
if(strcmp(stu[i].name,oppo)==0||strcmp(stu[i].stuNo,oppo)==0){
k=i;
break;
}
}
if(k<0) {
printf("对不起,你要查找的学生不存在!\n");
} else{
for(i=0;i<count;i++){
fscanf(fp,"%s %s %f %f %f %f",stu[i].name,stu[i].stuNo,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2],&stu[i].sum);
}
printf("请输入学生信息(姓名,学号,成绩,成绩,成绩。每组数据之间以空格分开):\n");
scanf("%s %s %f %f %f",stu[k].name,stu[k].stuNo,&stu[k].score[0],&stu[k].score[1],&stu[k].score[2]);
stu[k].sum=stu[k].score[0]+stu[k].score[1]+stu[k].score[2];
for(i=0;i<count;i++){
fprintf(fp,"%s %s %f %f %f %f\n",stu[i].name,stu[i].stuNo,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].sum);
} }
fclose(fp);
}
//主函数
int main()
{
int i,j,k,count;
printf("请输入已有学生的人数:(文件中有2个学生的信息):");
scanf("%d",&count);
while(1){
menu();
printf("请选择:");
scanf("%d",&j);
switch(j){
case 1:
menu3();
scanf("%d",&j);
switch(j){
case 1:
printf("请输入添加学生信息的人数:");
scanf("%d",&k);
save2(k);
count = 0;
count = count +k;
break;
case 2:
printf("请输入添加学生信息的人数:");
scanf("%d",&k);
save1(k);
count = count +k;
break;
default : printf("你输入的选项不存在");
break;
}
break;
case 2:
menu2();
scanf("%d",&j);
switch(j){
case 1: check1(count);
break;
case 2: check2(count);
break;
default : printf("你输入的选项不存在");
break;
}
break;
case 3: show(count);
break;
case 4 :
order(count);
break;
case 5: update(count);
break;
case 0: exit(0);
default : printf("你输入的选项不存在");
break; }
}
return 0;
}
/*
//向文件stuInfo.txt中输入信息保存学生信息
void save(int t){
FILE *fp;
int i;
fp = fopen("D:\stuInfo.txt","ab+");
printf("Please input data of student:\n");
for(i=0;i<t;i++){
scanf("%s%d%d%f%f%f",stu[i].name,stu[i].stuNo,&stu[i].age,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
}
if(fp==NULL){
printf("Can't open file");
exit(0);
}
for(i=0;i<t;i++){
if(fwrite(&stu[i],sizeof(struct Student_type),1,fp)!=1){
printf("File write error!");
fclose(fp);
}
}
}
//从文件stuInfo .txt中获取信息并打印
void show(){
FILE *fp;
int i;
fp = fopen("D:\stuInfo.txt","ab+");
if(fp==NULL){
printf("Can't open file");
exit(0);
}
for(i=0;i<10;i++){
fread(&stu[i],sizeof(struct Student_type),1,fp);
printf("%-13s%12d%4d%f\n",stu[i].name,stu[i].stuNo,stu[i].age,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
} fclose(fp);
}*/
简单的学生管理(C语言)的更多相关文章
- 学生成绩管理C语言版
[标题]学生成绩管理的设计与实现 [开发语言]C语言 [概要设计]使用结构体存储学生的学号.姓名和成绩信息,实现对学生成绩类的基本操作:增加.删除.查询.排序 [测试数据]按提示输入5组正确的正确的数 ...
- 使用Bootstrap+metisMenu完成简单的后台管理界面
零. 写在前面 作者最近在一个小项目中需要写后台管理界面,在互联网上绕了一圈,最后决定使用Bootstrap+metisMenu来完成.理由1:Bootstrap是目前流行的前端框架,风格简约,简单易 ...
- Jquery如何序列化form表单数据为JSON对象 C# ADO.NET中设置Like模糊查询的参数 从客户端出现小于等于公式符号引发检测到有潜在危险的Request.Form 值 jquery调用iframe里面的方法 Js根据Ip地址自动判断是哪个城市 【我们一起写框架】MVVM的WPF框架(三)—数据控件 设计模式之简单工厂模式(C#语言描述)
jquery提供的serialize方法能够实现. $("#searchForm").serialize();但是,观察输出的信息,发现serialize()方法做的是将表单中的数 ...
- 基于Spring MVC + Spring + MyBatis的【学生管理管理系统】
资源下载:https://download.csdn.net/download/weixin_44893902/45602690 练习点设计:模糊查询.删除.新增 一.语言和环境 实现语言:JAVA语 ...
- Python开发程序:简单主机批量管理工具
题目:简单主机批量管理工具 需求: 主机分组 登录后显示主机分组,选择分组后查看主机列表 可批量执行命令.发送文件,结果实时返回 主机用户名密码可以不同 流程图: 说明: ### 作者介绍: * au ...
- [Winform]一个简单的账户管理工具
最近一直觉得注册的账户越来越多,帐号密码神马的容易弄混.自己就折腾了一个简单的账户管理工具,其实实现也挺简单,将每个账户的密码及相关密码提示信息,经aes算法加密之后保存到数据库,当前登录用户可以查询 ...
- 编程作业—C++初探 简单的学生信息处理程序实现
简单的学生信息处理程序实现 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 ...
- 关于《数据格式修改》的简单应用程序(C语言)
关于<数据格式修改>的简单应用程序(C语言) 至亲爱的博友: 大家好,好久不见了.由于博主还是一名大学在校生,不可避免的需要和指导教师共同完成一些项目,因此前一段时间暂时停止了博客的更新. ...
- Asp.NetMVC利用LigerUI搭建一个简单的后台管理详解(函登录验证)
上一篇 Asp.Net 中Grid详解两种方法使用LigerUI加载数据库数据填充数据分页 了解了LigerUI 中Grid的基本用法 现在结合上一篇的内容做一个简单的后台管理,当然也有前台的页面 ...
随机推荐
- 树莓派3B+安装64位ubuntu系统和docker工具
想在树莓派3B上安装一些64位应用(例如64位JDK),因此首先要安装64位的操作系统,今天咱们就一起来实战: 原文地址:https://blog.csdn.net/boling_cavalry/ar ...
- Spring学习(四)--Spring的IOC
1.BeaDefinition的Resource定位 (1)直接使用BeanDefinitionFactory 定义一个Resource来定位容器使用的BeanDefinition. Resource ...
- Typore的简单用法
1 无序列表使用方法 +号和空格一起按就可以写出这个点 2 有序列表使用方法 .先写1.然后打个空格就再回车 3 使用#和空格表示一级标题 一级标题 4 使用##和空格表示二级标题 5 二级标题 6 ...
- 078 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 03 创建类
078 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 03 创建类 本文知识点:创建类 说明:因为时间紧张,本人写博客过程中只是对知识点的关 ...
- 070 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 02 综合案例-数组移位-从键盘接收数据
070 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 02 综合案例-数组移位-从键盘接收数据 本文知识点:综合案例-数组移位-从键盘接收数据 说明:因为时间紧张 ...
- matlab中datest() 将日期和时间转换为字符串格式
来源:https://ww2.mathworks.cn/help/matlab/ref/datestr.html?searchHighlight=datestr&s_tid=doc_srcht ...
- Object.assign()的使用
一.Object.assign()对象的拷贝 1 Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象.它将返回目标对象. 2 Object.assign(ta ...
- .net网站自动化部署-致两年前的遗留的问题
又到一年国庆,终于有了难得的几天空闲,计划陪陪媳妇娃子,再把最近阅读的几本相关书总结梳理下.当然,计划总是美好的,于时接到了一个老朋友电话.大意是他搞了一个.net小网站,部署了4个节点,每次更新程序 ...
- vue使用vueCropper裁剪功能,代码复制直接使用
//先安装包 npm install vue-cropper --save-dev <template> <div id="merchantInformation" ...
- RHSA-2018:0007-重要: 内核 安全更新(需要重启、存在EXP)
[root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) 修复命令: 使用root账号登陆She ...