简单的学生管理(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的基本用法 现在结合上一篇的内容做一个简单的后台管理,当然也有前台的页面 ...
随机推荐
- python基本语法要注意哪些?本文详解!
基本语法 第一个注释 print("hello,python") # 第二行注释 string_demo = "你好!" string_demo print ( ...
- 实现select下拉框的无限加载(懒加载)
在实际开发中我们有时无法避免select下拉功能数据过大导致页面卡顿(如在我在一次迭代中有一个select项接口返回了5000多条数据).用户体验差!结合实际开发给出了3个解决方案: 方案1.sele ...
- Linux系统编程 —互斥量mutex
互斥量mutex 前文提到,系统中如果存在资源共享,线程间存在竞争,并且没有合理的同步机制的话,会出现数据混乱的现象.为了实现同步机制,Linux中提供了多种方式,其中一种方式为互斥锁mutex(也称 ...
- django 3.1 序列化讲述
序列化Django对象¶ Django的序列化框架提供了一种将Django模型"翻译"为其他格式的机制.通常,这些其他格式将基于文本,并用于通过电线发送Django数据,但是序列化 ...
- HTML中限制input 输入框输入内容
限制 input 输入框只能输入纯数字1.onkeyup = "value=value.replace(/[^\d]/g,'')" 使用 onkeyup 事件,有 bug ,那就是 ...
- 一种统计ListView滚动距离的方法
注:本文同步发布于微信公众号:stringwu的互联网杂谈 一种统计ListView滚动距离的方法 ListView做为Android中最常使用的列表控件,主要用来显示同一类的数据,如应用列表,商品列 ...
- 记录从Winserver2012R2升级到Winserver2019
升级系统是必不可少的,最近想搞虚拟化Hyper-V:于是着手需要装一台WIN server 2019. 手头有一台Winserver 2012R2,正好拿来测试升级,此博做一个记录. 操作流程:在升级 ...
- 路由总结之静态、RIP、OSPF、IS-IS、BGP和策略路由
路由无疑是当今网络的核心,看到浩如烟海的网络资料,可以让人皓首穷经啊,而且都是浩浩荡荡几百页,所以想搞简单点. 静态路由 静态路由无疑是最简单,也是最基本的. Ip route-static(指定是静 ...
- 【小白学PyTorch】19 TF2模型的存储与载入
[新闻]:机器学习炼丹术的粉丝的人工智能交流群已经建立,目前有目标检测.医学图像.时间序列等多个目标为技术学习的分群和水群唠嗑的总群,欢迎大家加炼丹兄为好友,加入炼丹协会.微信:cyx64501661 ...
- 小白安装使用Redis
Redis属于NoSql中的键值数据库,非常适合海量数据读写. 之前用过mongo但是没有用过redis,今天来学习安装redis. 先去官网下载redis安装包 redis官网 redis是c语言编 ...