C语言学生管理系统(将数据保存至TXT文档)

在大一学习完C语言之后,回家遇到疫情,便有了用C语言写一个学生管理系统的想法,在家花费了一些时间,刚开始写了一点,后来可能是因为学艺不精就没写完,开学到现在突然记起这个项目,便用了两天写了一下

源码下载地址
https://github.com/Lester-bor/WQ/tree/main/Student%20management%20system
主要功能

  1. 学生成绩信息的写入
  2. 学生成绩信息的删除
  3. 学生信息的更改
  4. 学生信息的查询
  5. 学生信息的保存(保存信息至自己电脑的一个txt文档中)

文档结构见下图

图片中的information.txt便是保存学生信息的TXT文档

功能界面见下图

通过输入不同的数来选择功能

代码如下(代码中有详细的注释)
有些地方为了装逼加了延时哈哈哈哈哈

#include<stdio.h>//标准输入输出头文件
#include<string.h>//strcmp函数所需头文件
#include<stdlib.h>//FILE所需头文件#define PATH "information.txt"//宏定义    学生信息存储目录char information[1024][20];//程序运行开始从txt文档读取出的学生信息将会存储在这个数组,后面我们增删改查操作的都是这个二维数组void delay(unsigned int z);
void Connection_Library();//连接数据库
void Menu();//菜单
void Preservation();//存档FILE *fp;//读取txt或写入txt的指针
char chaxun[1][20];//查询时所需数组
char shanchu[1];//删除时所需数组
int i,j;//循环变量
int num=0;//录入学生信息时才会改变默认为0,也就相当于“录入”的学生人数
int Number_of_Student;//这是一个全局变量记录有多少个学生
int NUM;//读取时读到的字符串数后将转换为学生人数,该变量会多读取一个'\0'字符所以计算学生人数公式是Number_of_Student = (NUM-1)/8
int k;//key选择变量//(1)\t是对齐相当于tab//(2)\n是换行相当于enter//(3)exit(0)是结束整个程序的语句//(4)system("cls")是清屏语句void main()
{printf("连接数据库中,请稍后···\n");delay(1553600);Connection_Library();//连接数据库delay(1553600);system("cls");//清屏Menu();//调用菜单while(1){printf("\n请输入选择功能的序号:");scanf("%d",&k);switch(k){case 0://退出程序exit(0);case 1://录入{printf("请输入所要录入的学生人数:");scanf("%d",&num);printf("学号\t姓名\t语文\t数学\t英语\t物理\t化学\t生物\t\n");for(i=(Number_of_Student*8);i<((num*8)+(Number_of_Student*8));i++){scanf("%s",&information[i]);}Number_of_Student = ((num*8)+(NUM-1))/8;Preservation();}break;case 2://查询{//将整个学生信息数组也就是information全部搜索一遍此处是依据学号进行查询,怎么样避免搜索时把学生成绩当成学号来处理呢//也就是看检索到的此时的i是不是在学号的排列次序上//我们来分析一下数组的内部结构//(0)学号(1)姓名(2)语文(3)数学(4)英语(5)物理(6)化学(7)生物//前面是第一个同学的信息,然后来到第二个同学的信息//(8)学号(9)姓名(10)语文(11)数学(12)英语(13)物理(14)化学(15)生物//以此类推就会发现,学生学号的位置数取余与8都是0——而这也就是我们区别成绩与学号的关键了//至于姓名大概也就和学号的查询方法差不多,姓名位与8取余都是1printf("请输入所查询学生学号或姓名:");scanf("%s",&chaxun[0]);for(i=0;i<1024;i++)    {if((strcmp(chaxun[0],information[i])==0)&&(i%8)==0){printf("学号\t姓名\t语文\t数学\t英语\t物理\t化学\t生物\t\n");printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t\n",information[i],information[i+1],information[i+2],information[i+3],information[i+4],information[i+5],information[i+6],information[i+7]);break;}}if(i<1024)break;for(i=0;i<1024;i++){if(strcmp(chaxun[0],information[i])==0&&((i%8)==1)){printf("学号\t姓名\t语文\t数学\t英语\t物理\t化学\t生物\t\n");printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t\n",information[i-1],information[i],information[i+1],information[i+2],information[i+3],information[i+4],information[i+5],information[i+6],information[i+7]);break;}}if(i<1024)              break;if(i==1024){                printf("查询无果!!!\n");delay(3000000);system("cls");Menu();break;}}break;case 3://修改{printf("\n");printf("------成绩修改界面------\n");printf("请输入要修改的成绩同学的姓名或学号:");scanf("%s",&chaxun[0]);for(i=0;i<1024;i++)//按学号查询并且修改{if((strcmp(chaxun[0],information[i])==0)&&(i%8)==0){printf("当前该生成绩:\n");printf("学号\t姓名\t语文\t数学\t英语\t物理\t化学\t生物\t\n");printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t\n",information[i],information[i+1],information[i+2],information[i+3],information[i+4],information[j+5],information[i+6],information[i+7]);printf("请输入该生成绩:\n");printf("学号\t姓名\t语文\t数学\t英语\t物理\t化学\t生物\t\n");for(i,j=0;j<8;j++){scanf("%s",&information[i+j]);}Preservation();break;}             }if(i<1024&&(i!=0)){                break;}for(i=0;i<1024;i++)//按姓名查询并且修改{if(strcmp(chaxun[0],information[i])==0&&((i%8)==1)){printf("当前该生成绩:\n");printf("学号\t姓名\t语文\t数学\t英语\t物理\t化学\t生物\t\n");printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t\n",information[i-1],information[i],information[i+1],information[i+2],information[i+3],information[i+4],information[i+5],information[i+6],information[i+7]);printf("请输入该生成绩:\n");printf("学号\t姓名\t语文\t数学\t英语\t物理\t化学\t生物\t\n");for(i,j=0;j<8;j++){scanf("%s",&information[i+j-1]);}// for(i;i<9;i++)//   {       scanf("%s",&information[i-1]);//修改的意思就是重新给数组原来的学生信息赋值,将原信息覆盖// }Preservation();break;}}if(i<1024&&(i!=0))break;if(i==1024){              printf("查询无果!!!\n");delay(3000000);system("cls");Menu();break;}}case 4://打印ALL{printf("学号\t姓名\t语文\t数学\t英语\t物理\t化学\t生物\t\n");for(i=1;i<=Number_of_Student*8;i++){printf("%s\t",information[i-1]);if(i%8==0)printf("\n");}}break;case 5://删除指定同学成绩信息{printf("------成绩删除界面------\n");printf("请输入所要删除学生信息的学号或姓名:");scanf("%s",&chaxun[0]);for(i=0;i<1024;i++)//按学号查询并且删除{if((strcmp(chaxun[0],information[i])==0)&&(i%8)==0){printf("当前该生成绩:\n");printf("学号\t姓名\t语文\t数学\t英语\t物理\t化学\t生物\t\n");printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t\n",information[i],information[i+1],information[i+2],information[i+3],information[i+4],information[j+5],information[i+6],information[i+7]);//以下是删除操作printf("提示:确定要删除该生成绩?(Y or N)\n");scanf("%s",&shanchu[0]);if(shanchu[0]=='Y'){for(i;i<Number_of_Student*8;i++){for(j=0;j<20;j++)//内循环20次把第二维数组都给移位{information[i][j]=information[i+8][j];//此处的删除操作是指将被删除的学生信息覆盖,也就避免了输出空行//这里有information[i+8][j]是因为此时的i是被删除学生所对应的学号,所以数组中的值是把i+8复制给i}}Number_of_Student = Number_of_Student-1;Preservation();printf("删除成功!!!\n");delay(3000000);break;}elsebreak;}                }if(i<1024){             break;}for(i=0;i<1024;i++)//按姓名查询并且删除{if(strcmp(chaxun[0],information[i])==0&&((i%8)==1)){printf("当前该生成绩:\n");printf("学号\t姓名\t语文\t数学\t英语\t物理\t化学\t生物\t理综合\t总分\t\n");printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t\n",information[i-1],information[i],information[i+1],information[i+2],information[i+3],information[i+4],information[i+5],information[i+6],information[i+7]);//以下是删除操作-----上面的i被保留以便于后边进行删除操作printf("提示:确定要删除该生成绩?(Y or N)\n");scanf("%s",&shanchu[0]);if(shanchu[0]=='Y'){for(i;i<Number_of_Student*8;i++){for(j=0;j<20;j++){information[i-1][j]=information[i+7][j];//此处的删除操作是指将被删除的学生信息覆盖,也就避免了输出空行//这里有information[i+7][j]是因为此时的i是被删除学生所对应的姓名,所以数组中的值是把i+7复制给i-1}}Number_of_Student = Number_of_Student-1;Preservation();printf("删除成功!!!\n");delay(3000000);break;}elsebreak;}}if(i<1024)//看此上边是否已经完成删除若删除则i<1024则此时跳出case               break;if(i==1024)//当i=1024时还没有查找到该学生则进入以下语句输出查询未果{               printf("查询无果!!!\n");delay(3000000);system("cls");Menu();break;}}case 6://清屏{system("cls");//----由于已经清屏为了简单直接清除全部所以需重新输出功能选择区----//Menu();}break;}}}void delay(unsigned int z)
{unsigned int x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);
}void Connection_Library()//检查是否打开文件函数并将从文本库读取出的信息存入数组information[]
{fp = fopen("information.txt","r");if (fp == NULL){printf("连接失败\n");}else{NUM=0;while(!feof(fp)){fscanf(fp,"%s",information[NUM]);NUM++;}printf("连接成功\n");Number_of_Student = (NUM-1)/8;}
}void Menu()//---功能选择区
{printf("-------菜单-------\n\n");printf("(1) 录入成绩\n");printf("(2) 查询成绩\n");printf("(3) 修改信息\n");printf("(4) 打印全部成绩\n");printf("(5) 删除成绩\n");printf("(6) 清除屏幕\n");printf("(0) 退出程序\n");printf("\n");printf("必须在功能界面输入(0)以退出系统 否则数据将无法保存\n");printf("\n");printf("数据库中现在共有-%d-名同学信息\n",Number_of_Student);
}void Preservation()
{printf("正在存档请稍后···\n");//------存档学生信息------//fp=fopen("information.txt","w");for(i=0;i<Number_of_Student*8;i++)fprintf(fp,"%s ",information[i]);//将数组a的内容写入文件,以空格隔开printf("\n");delay(3000000);printf("存档完毕\n");delay(3000000);
}//--------------Copy BaiYuQing Stdio--------------//
//-------------------2020-12-11-------------------//

代码简单,几乎全部就是对数组的操作
作者邮箱:zjkenjin@qq.com
原创不易,转载请保留出处 https://blog.csdn.net/ZhangDaXianc/article/details/110950802

C语言学生管理系统(将数据保存至TXT文档)附源码相关推荐

  1. 轻松实现全国高校地理位置数据爬取(文末附源码和数据集)

    大家好,我是小一 一个城市的历史底蕴,不光可以从经济.文化和人文景点,还可以从高校的数量可以看出来.所以,今天就来试试如何爬取全国高校的分布数据. 以下文章比较适合初学者,老读者请酌情加速阅读. 今天 ...

  2. 基于C语言QT开发的校园导游系统 设计文档+项目源码

    资源下载地址:https://download.csdn.net/download/sheziqiong/85695045 资源下载地址:https://download.csdn.net/downl ...

  3. Python分析并爬取起点中文网的章节数据,保存为txt文档

    如题,分析起点中文网,并提取出来章节链接,保存为txt文档. 代码仅供交流使用,请勿用作商业用途,如有违规,请联系删除 一,分析 1.打开带有章节的链接,例如:(随便选的一篇文章) 2.打开浏览器的抓 ...

  4. 含文档+PPT+源码等]精品基于SSM的图书管理系统[包运行成功]

     博主介绍:✌在职Java研发工程师.专注于程序设计.源码分享.技术交流.专注于Java技术领域和毕业设计✌ 项目名称 含文档+PPT+源码等]精品基于SSM的图书管理系统[包运行成功] 系统介绍 & ...

  5. [含文档+PPT+源码等]基于SSM个人财务记账账单收入支出统计管理系统[包运行成功]

       博主介绍:✌在职Java研发工程师.专注于程序设计.源码分享.技术交流.专注于Java技术领域和毕业设计✌ 项目名称 [含文档+PPT+源码等]基于SSM个人财务记账账单收入支出统计管理系统 系 ...

  6. [含文档+PPT+源码等]基于SSM个人财务记账账单收入支出统计管理系统

      博主介绍:✌在职Java研发工程师.专注于程序设计.源码分享.技术交流.专注于Java技术领域和毕业设计✌ 项目名称 [含文档+PPT+源码等]基于SSM个人财务记账账单收入支出统计管理系统 系统 ...

  7. 串口摄像头得到了一张图像的JPEG数据,我把这些数据复制到txt文档了,想将这些数据变为图像...

    从串口摄像头得到了一张图像的JPEG数据,我把这些数据复制到txt文档了,想将这些数据变为图像,在VC++中应该怎么做呢?看了一 些资料,有人说直接保存成jpg格式,于是我把文件名的后缀.txt改成了 ...

  8. NLP:两种方法(自定义函数和封装函数)实现提取两人对话内容(***分隔txt文档),并各自保存为txt文档

    NLP:两种方法(自定义函数和封装函数)实现提取两人对话内容(***分隔txt文档),并各自保存为txt文档 目录 问题探究 实现代码 问题探究 实现代码 f=open("niu.txt&q ...

  9. Android 小项目之--数据存储【Files】(附源码)

    继上篇数据存储,现在我们来讲讲另外一种数据存储,Files.本篇讲述步骤如下: 1.温故而知新,复习四种数据存储的区别. 2.什么是 Files 数据存储. 3.什么是 Properties ? 4. ...

最新文章

  1. Hadoop- Hadoop运维小计
  2. Bioinfo:学习Python,做生信PartII 学习笔记
  3. 为什么要实现序列化接口
  4. 电路交换网络中,每条电路独占其经过的物理链路。
  5. spring整合struts2时作用域scope解析
  6. eclipse svn 没有 connector
  7. 物联网通信技术期末复习6:第六章-应用传输技术
  8. 读计算机网络得学五笔吗,打破无聊难学 另类五笔学习方法
  9. Python-根据日期计算周对应的日期
  10. LeetCode contest 182 5369. 统计作战单位数
  11. win10下安装matlab r2018a破解版
  12. 图片切换马赛克动画效果
  13. 造车新势力平均月薪 15367 元,自动驾驶算法岗年薪百万
  14. 谷歌地图各级比例尺及空间分辨率
  15. 一个Android下的自动下载歌词的代码
  16. 图像的频谱特性物理意义:
  17. linux区分系统盘和数据盘命令
  18. python属于汇编语言还是高级语言_python是汇编语言吗
  19. java 设置dns_Java动态修改dns(DDNS基于DNSPot和IPv6)
  20. java多线程设计模式

热门文章

  1. 国外十分流行的一首诗,道出人生真相!
  2. 聊聊英语口语学习提高的一些经验
  3. fir302m虚拟服务器,斐讯 FIR302M 无线路由器无线接入与WDS设置
  4. java tcp 获取状态_TCP连接状态
  5. h5移动端实现物理返回键关闭弹框而非返回上一级页面
  6. 使用OneKey备份系统后找不到GHO系统文件解决方法
  7. Kontakt加载音源弹出File not found
  8. 06-Java基础-面向对象概述
  9. kali2020.1 xfce换gnome桌面环境
  10. php有没有invoke,php invoke方法有什么用