简单的学生管理(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的基本用法 现在结合上一篇的内容做一个简单的后台管理,当然也有前台的页面 ...
随机推荐
- Pycharm默认输入状态是insert状态,选中文字无法直接输入替换或删除
最近在学习Python,使用pycharm的时候,我的光标处于加粗状态,也就是编程软件经常出现的insert插入编辑模式,我就点击了一下insert按键,退出了这个模式,但是我每次打开都是会处于这种模 ...
- Metasploit之漏洞利用( Metasploitable2)
每个操作系统都会存在各种Bug,像Windows这样有版权的操作系统,微软公司会快速地开发针对这些Bug或漏洞的补丁,并为用户提供更新.全世界有大量的漏洞研究人员会夜以继日地发现.研究新的Bug,这些 ...
- is_mobile()判断手机移动设备
is_mobile()判断手机移动设备.md is_mobile()判断手机移动设备 制作响应式主题时会根据不同的设备推送不同的内容,是基于移动设备网络带宽压力,避免全局接收pc端内容. functi ...
- Java基础——消息队列
1.消息队列的适用场景:商品秒杀.系统解耦.日志记录等 2.使用Queue实现消息对列 双端队列(Deque)是 Queue 的子类也是 Queue 的补充类,头部和尾部都支持元素插入和获取阻塞队列指 ...
- [VBA原创源代码] excelhome 汇总多工作表花名册
生病了,一点一滴的积累,慢慢康复,今年十月,我就 2 周岁了. 以下代码完成了excelhome中留的作业 http://club.excelhome.net/forum.php?mod=viewth ...
- 028 01 Android 零基础入门 01 Java基础语法 03 Java运算符 08 逻辑“或”运算符
028 01 Android 零基础入门 01 Java基础语法 03 Java运算符 08 逻辑"或"运算符 本文知识点:Java中的逻辑"或"运算符 逻辑& ...
- 当安装、卸载件包时,出现依赖问题 error: Failed dependencies解决办法
error: Failed dependencies:-- 依赖关系非常复杂,当你试图先安装任何一个包时都会出现这样的依赖关系错误,这时候你就应该强制安装了,我认为只要你把服务或软件需要的包都装上,强 ...
- 【题解】【POI2000】病毒
题目链接 这题让我们构造一个无限长的,不包括给定字符串的01串. 把给定字符串放到\(AC\)自动机上,在结尾处打上标记. 发现,如果我们要构造一个无限长的串,必然要有一个环. 那么这个环上就一定不能 ...
- [C#.NET 拾遗补漏]09:数据标注与数据校验
数据标注(Data Annotation)是类或类成员添加上下文信息的一种方式,在 C# 通常用特性(Attribute)类来描述.它的用途主要可以分为下面这三类: 验证 Validation:向数据 ...
- spring-boot-route(十二)整合redis做为缓存
redis简介 redis作为一种非关系型数据库,读写非常快,应用十分广泛,它采用key-value的形式存储数据,value常用的五大数据类型有string(字符串),list(链表),set(集合 ...