#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语言)的更多相关文章

  1. 学生成绩管理C语言版

    [标题]学生成绩管理的设计与实现 [开发语言]C语言 [概要设计]使用结构体存储学生的学号.姓名和成绩信息,实现对学生成绩类的基本操作:增加.删除.查询.排序 [测试数据]按提示输入5组正确的正确的数 ...

  2. 使用Bootstrap+metisMenu完成简单的后台管理界面

    零. 写在前面 作者最近在一个小项目中需要写后台管理界面,在互联网上绕了一圈,最后决定使用Bootstrap+metisMenu来完成.理由1:Bootstrap是目前流行的前端框架,风格简约,简单易 ...

  3. Jquery如何序列化form表单数据为JSON对象 C# ADO.NET中设置Like模糊查询的参数 从客户端出现小于等于公式符号引发检测到有潜在危险的Request.Form 值 jquery调用iframe里面的方法 Js根据Ip地址自动判断是哪个城市 【我们一起写框架】MVVM的WPF框架(三)—数据控件 设计模式之简单工厂模式(C#语言描述)

    jquery提供的serialize方法能够实现. $("#searchForm").serialize();但是,观察输出的信息,发现serialize()方法做的是将表单中的数 ...

  4. 基于Spring MVC + Spring + MyBatis的【学生管理管理系统】

    资源下载:https://download.csdn.net/download/weixin_44893902/45602690 练习点设计:模糊查询.删除.新增 一.语言和环境 实现语言:JAVA语 ...

  5. Python开发程序:简单主机批量管理工具

    题目:简单主机批量管理工具 需求: 主机分组 登录后显示主机分组,选择分组后查看主机列表 可批量执行命令.发送文件,结果实时返回 主机用户名密码可以不同 流程图: 说明: ### 作者介绍: * au ...

  6. [Winform]一个简单的账户管理工具

    最近一直觉得注册的账户越来越多,帐号密码神马的容易弄混.自己就折腾了一个简单的账户管理工具,其实实现也挺简单,将每个账户的密码及相关密码提示信息,经aes算法加密之后保存到数据库,当前登录用户可以查询 ...

  7. 编程作业—C++初探 简单的学生信息处理程序实现

    简单的学生信息处理程序实现 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 ...

  8. 关于《数据格式修改》的简单应用程序(C语言)

    关于<数据格式修改>的简单应用程序(C语言) 至亲爱的博友: 大家好,好久不见了.由于博主还是一名大学在校生,不可避免的需要和指导教师共同完成一些项目,因此前一段时间暂时停止了博客的更新. ...

  9. Asp.NetMVC利用LigerUI搭建一个简单的后台管理详解(函登录验证)

    上一篇 Asp.Net 中Grid详解两种方法使用LigerUI加载数据库数据填充数据分页  了解了LigerUI 中Grid的基本用法  现在结合上一篇的内容做一个简单的后台管理,当然也有前台的页面 ...

随机推荐

  1. Python3.8下载安装步骤及环境变量配置详解

    安装地址:https://www.python.org/ 打开python官网网址,点击 Python 3.8.5 3.下载与自己电脑系统相匹配的版本(这里以64为例) 点击下载完成后打开文件运行 点 ...

  2. 080 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 05 单一职责原则

    080 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 05 单一职责原则 本文知识点:单一职责原则 说明:因为时间紧张,本人写博客过程中只是 ...

  3. 02 Writing Your First Program 写你的第一个C程序

    Let's print "Hi" 打印输出"Hi" In your first computer program, let's print something ...

  4. 001 win10下安装linux子系统--Ubuntu及其图形界面

    首次启动图形界面关键步骤及相关命令: 步骤: 打开Xlunch 打开XLaunch,选择:"one large window",Display number设置成0,其它默认即可, ...

  5. springCloud项目搭建

    新建父maven项目 groupId:pers.xzp.springCloudartifactId:springCloud 父项目中仅仅需要一个pom文件,用于管理模块的依赖统一.继承等 编辑pom文 ...

  6. MySQL基础 :基本知识点大纲

  7. vue获取下拉框select的值

    1.我写的是循环遍历,然后获取id :value="v.id"这就是获取的id然后打印就可以获取id了

  8. linux块设备驱动---概念与框架(转)

    基本概念   块设备(blockdevice) --- 是一种具有一定结构的随机存取设备,对这种设备的读写是按块进行的,他使用缓冲区来存放暂时的数据,待条件成熟后,从缓存一次性写入设备或者从设备一次性 ...

  9. c++11 R+字符串

    R+字符串 prefix(optional) R"delimiter(raw_characters)delimiter" (6) (since C++11) C++11引入了原始字 ...

  10. python xlrd读取Excel文件

    1 import xlrd 2 3 #打开excel文件 4 book = xlrd.open_workbook('salary.xls') 5 6 #打印每个工作表的名称 7 for sheet i ...