C语言实现学生管理系统V2.1(结构体+文件读写)

您所在的位置:网站首页 c语言如何实现查询功能 C语言实现学生管理系统V2.1(结构体+文件读写)

C语言实现学生管理系统V2.1(结构体+文件读写)

2023-11-10 10:55| 来源: 网络整理| 查看: 265

实现功能 添加学生删除学生修改学生查询学生显示所有学生信息读取学生信息写入学生信息菜单 简述

        该系统主要使用了结构体、数组、循环、条件语句,包含头文件string.h、windows.h,使用结构体做学生数据的存储结构,该结构体存放了学生的基本信息,包括学号、姓名、性别、年龄、院系、专业等相关信息,系统还实现了对于学生的CRUD操作。

运行截图

 代码  #include #include #include #include #define N 100 //最大学生数量为50 typedef struct Student{ int id; //编号 char name[20]; //姓名 char sex[20]; //性别 int age; //年龄 char depart[40]; //院系 char major[40]; //专业 }Student; Student student[N]; int count = 0; //当前学生数量 /* 以下是函数声明 */ void addStu(); //添加学生信息 void delStu(); //删除学生信息 void modStu(); //修改学生信息 int seaStuById(); //查询学生信息 - 根据ID void showStu(); //显示学生信息 void print(int id); //显示一条学生信息 void menu(); //菜单 void readStu(); //读取学生信息 void saveStu(); //保存学生信息 /* * 学生函数的实现 * 以下是函数实现 */ //添加学生信息 void addStu(){ printf("请输入学生编号(1 - N):"); scanf("%d",&student[count].id); printf("请输入学生姓名:"); scanf("%s",student[count].name); printf("请输入学生性别(男/女):"); scanf("%s",student[count].sex); printf("请输入学生年龄:"); scanf("%d",&student[count].age); printf("请输入学生院系:"); scanf("%s",student[count].depart); printf("请输入学生专业:"); scanf("%s",student[count].major); count++; } //删除学生信息 void delStu(){ int id,i; printf("请输入学生编号:"); scanf("%d",&id); int index; index = seaStuById(id); if(index == -1){ printf("未查找到!\n"); return; } //进行覆盖 - 删除指定条目 for(i = index;i < N;i++){ student[i].id = student[i+1].id; strcpy(student[i].name,student[i+1].name); strcpy(student[i].sex,student[i+1].sex); student[i].age = student[i+1].age; strcpy(student[i].depart,student[i+1].depart); strcpy(student[i].major,student[i+1].major); } count--; printf("删除成功!\n"); } //修改学生信息 void modStu(){ int id; printf("请输入学生编号:"); scanf("%d",&id); int index; index = seaStuById(id); if(index == -1){ printf("未查找到!\n"); return; } printf("请输入学生编号(1 - N):"); scanf("%d",&student[index].id); printf("请输入学生姓名:"); scanf("%s",student[index].name); printf("请输入学生性别(男/女):"); scanf("%s",student[index].sex); printf("请输入学生年龄:"); scanf("%d",&student[index].age); printf("请输入学生院系:"); scanf("%s",student[index].depart); printf("请输入学生专业:"); scanf("%s",student[index].major); printf("修改成功!\n"); } //查询学生信息 - 根据ID int seaStuById(int id){ int i; for(i = 0;i < count;i++){ if(student[i].id == id){ return i; } } return -1; //查询失败 - 返回-1的意义在于可以根据返回值的不同做成功与否的验证 } //显示学生信息 void showStu(){ int i; printf("---------------------------------------------\n"); printf("学生编号 姓名 性别 年龄 院系 专业\n"); for(i = 0;i < count;i++){ printf("%d %s %s %d %s %s\n",student[i].id,student[i].name,student[i].sex,student[i].age,student[i].depart,student[i].major); } printf("---------------------------------------------\n"); } //显示一条学生信息 void print(int id){ int index; index = seaStuById(id); if(index == -1){ printf("未查找到!\n"); return; } printf("---------------------------------------------\n"); printf("学生编号 姓名 性别 年龄 院系 专业\n"); printf("%d %s %s %d %s %s\n",student[index].id,student[index].name,student[index].sex,student[index].age,student[index].depart,student[index].major); printf("---------------------------------------------\n"); } //菜单 void menu(){ int choice,id; while(1){ printf("---------------------------------------------\n"); printf("0、退出\n"); printf("1、添加学生信息\n"); printf("2、删除学生信息\n"); printf("3、修改学生信息\n"); printf("4、查询学生信息\n"); printf("5、显示学生信息\n"); printf("6、读取学生信息\n"); printf("7、写入学生信息\n"); printf("---------------------------------------------\n"); printf("请输入您的选择:"); scanf("%d",&choice); switch(choice){ case 0: exit(0); break; case 1: addStu(); break; case 2: delStu(); break; case 3: modStu(); break; case 4: printf("请输入查找的学生编号:"); scanf("%d",&id); print(id); break; case 5: showStu(); break; case 6: readStu(); break; case 7: saveStu(); break; default: printf("输入有误!\n"); break; } system("pause"); system("cls"); } } //读取学生信息 void readStu(){ int i = 0; FILE * fp; fp = fopen("students.txt","a+"); if(fp == NULL){ printf("文件打开失败!\n"); exit(0); } fscanf(fp,"%d",&count); for(i = 0;i < count;i++){ fscanf(fp,"%d %s %s %d %s %s",&student[i].id,student[i].name,student[i].sex,&student[i].age,student[i].depart,student[i].major); } fclose(fp); printf("读取成功!\n"); } //保存学生信息 void saveStu(){ int i = 0; FILE * fp; fp = fopen("students.txt","w"); if(fp == NULL){ printf("文件打开失败!\n"); exit(0); } fprintf(fp,"%d\n",count); for(i = 0;i < count;i++){ fprintf(fp,"%d %s %s %d %s %s\n",student[i].id,student[i].name,student[i].sex,student[i].age,student[i].depart,student[i].major); } fclose(fp); printf("写入成功!\n"); } int main() { menu(); return 0; }  说明

  该版本的代码主体是直接复用了V2.0版本,主要包括CRUD操作、显示数据等。

  主要添加了如下代码,也即文件读写部分的代码:

//读取学生信息 void readStu(){ int i = 0; FILE * fp; //定义FILE指针 fp = fopen("students.txt","a+"); //以读写方式打开文件,如果没有则创建同名文件 if(fp == NULL){ printf("文件打开失败!\n"); exit(0); } fscanf(fp,"%d",&count); //从文件中读取数据保存到 count变量 for(i = 0;i < count;i++){ //从文件中读取数据保存到 结构体中 fscanf(fp,"%d %s %s %d %s %s",&student[i].id,student[i].name,student[i].sex,&student[i].age,student[i].depart,student[i].major); } fclose(fp); //关闭文件指针 printf("读取成功!\n"); } //保存学生信息 void saveStu(){ int i = 0; FILE * fp; fp = fopen("students.txt","w"); //以只写方式打开文件 if(fp == NULL){ printf("文件打开失败!\n"); exit(0); } fprintf(fp,"%d\n",count); //读取count变量的值存储到文件的首行 for(i = 0;i < count;i++){ //保存已有的结构体对象保存到文件中 fprintf(fp,"%d %s %s %d %s %s\n",student[i].id,student[i].name,student[i].sex,student[i].age,student[i].depart,student[i].major); } fclose(fp); printf("写入成功!\n"); } 总结

        该版本在V2.0基础上开发添加了文件读写的功能,也即现在系统支持保存和读取系统操作的文件,大致上满足了系统的功能需求。但是控制台的操作方式明显不符合当下软件使用的要求,因此更加美化的UI成为了必需,后续我们可以使用一些支持C语言的图形库对系统界面进行一定的优化。

   



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3