本文实例为大家分享了C语言实现学生管理系统的具体代码,供大家参考,具体内容如下
项目介绍
学生信息管理系统是一个基于C语言开发的系统,其中有用到冒泡排序、指针、结构体、二位数组等知识。通过模块化的方法编写各个函数,其中在主界面函数调用各个模块的函数的实现以下具体功能:
1、学生信息的增删改查
2、学生成绩的排序
3、统计学生人数
4、显示所有学生的信息。
5、对学生信息存档
(资料图片仅供参考)
总体设计
本实验通过在main函数打开保存数据结果的文档和调用主界面函数;在主界面函数welcom()中实现边框的绘制,以及显示各个功能及各个功能对应的函数实现方法。
录入信息函数addInfo():此函数通过结构体student来保存录入的信息,其中为了确保数据的后续操作的准确性,通过学号的唯一性来标识每个学生的信息,通过编写及调用一个isIdSame()函数,该函数通过遍历所有学号确认学号来保障学号的唯一性,学号重复会提示用户需要重新输入函数。
查找学生信息函数:通过学号查找学生的信息,编写并调用一个findIndex()函数,该函数会遍历结构体的学号信息,查询到会返回该学号的坐标,没有找到该学号则返回-1;通过变量target来保存返回的结果。如果target不等于-1,则程序找到了该学号,通过编写并调用一个showInfo()函数来输出所有该学生的信息;否则输出查询此人,因为下标不可能为负数。
更新学生信息函数update():通过学号来找到该学生,调用findIndex()函数来确定该学生的位置,如果返回结果是小于0则函数结束,查无此人;若大于0则找到该学生,通过do…while函数switch选择语句的嵌套来进行用户需要求改某一项的内容。
删除函数del():查找学生的步骤跟更新学生信息函数的流程一样,如果findIndex()函数小于0则函数结束,否则通过一个for循环把结构体的数组从光标开始往前覆盖从而达到删除效果。
插入学生信息函数inserInfo():通过要求用户输入位置来定位插入到位置,输入用户输入的大于结构体数组的总数则插入到最后一个数组。否则通过一个for循环,把数组从最后开始往后移一位,把用户输入的位置的结果移到后一数组就编写并调用插入函数inserCurrentInfo()对当前位置数组进行覆盖插入。inserCurrentInfo()函数只负责对接收到的该位置的元素所有信息的写入。
排序函数sortTotal():创建一个临时变量提供元素与元素之间交换信息。通过双循环嵌套结构进行结构体的分数进行大小对比、交换位置来进行冒泡排序。最后排序完成之后输出分数由高到低排序的所有学生的信息。
显示学生信息函数showAllInfo():该函数通过全局变量count(该变量记录了所有添加、插入或删除过的学生信息,能准确记录学生的总人数)通过for循环去遍历student结构体,从而输出所有的所生信息。
学生数据存档函数writeData():该函数定义一个指针,以写入方式打开”stu.txt文本”,并把该文本的地址赋给指针fp。通过一个for循环遍历结构体里的元素,把结构体里的元素的属性输入到”stu.txt文本”。
详细代码
#include#include #include #include #include void addInfo();// 添加 void welcom(); //主界面 void showAllInfo();//展示所有信息 void showInfo(struct Student student);//展示学生信息 int findIndex(struct Student student[],int id);// 根据学号 返回对应下标 void del(); //删除 void search();// 查找学生信息 void updata();//更新 void sortTotal();//按总分排序 void writeData();//数据写入文件中 void initData();//初始化数据 从文件中读取数据,初始化数组 void showCount(); // 展示存储学生个数 void inserInfo();//插入学生信息 void inserCurrentInfo(int site); //当前位置插入 void con();//按任意键继续 int find1(struct Student student[],int id); //判断学号是否有重复 重复返回1 不重复返回0 void isIdSame(int x); //校验所输入学号是否重复 void gotoxy(int x,int y);//光标定位 int color(int c); //设置颜色输出 struct Student{ int id; char name[20]; int _math; int _chinese; int _english; int total;// 总分 } student[500]; int count=0;// 记录当前数组中存储学生个数 //主函数 int main(){ initData(); welcom(); return 0; } // 光标定位 void gotoxy(int x, int y) { COORD pos; pos.X = x; //横坐标 pos.Y = y; //纵坐标 SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos); } //设置颜色输出 int color(int c) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), c); //更改文字颜色 return 0; }; // 主界面 void welcom() { while(1){ system("cls"); int n; int i,j = 1; color(10); //淡绿色边框 for (i = 5; i <= 35; i++) //循环y轴坐标,打印输出上下边框=== { for (j = 10; j <= 57; j++) //循环x轴坐标,打印输出左右边框|| { gotoxy(j, i); if (i == 5 || i == 35) printf("="); //输出上下边框=== else if (j == 10 || j == 56) printf("||"); //输出左右边框|| } } color(15);//白色 gotoxy(25,8); printf("学生信息管理系统"); color(14); //设置字体颜色为黄色 gotoxy(15, 12); printf("1:录入学生信息"); gotoxy(35, 12); printf("2.查找学生信息"); gotoxy(15, 16); printf("3.删除学生信息"); gotoxy(35,16); printf("4.修改学生信息"); gotoxy(15, 20); printf("5.插入学生信息"); gotoxy(35,20); printf("6.按照学生成绩排序"); gotoxy(15, 24); printf("7.统计学生总数"); gotoxy(35,24); printf("8.显示所有学生信息"); gotoxy(15, 28); printf("9.学生数据存档并退出"); gotoxy(25,32); int choose; printf("请选择:[ ]\b\b"); //\b 光标回退一格 color(15); // 颜色变回白色 scanf("%d", &choose); switch (choose){ case 1:addInfo(); break; case 2:search(); break; case 3:del(); break; case 4:updata(); break; case 5:inserInfo();break; case 6:sortTotal(); break; case 7:showCount(); break; case 8:showAllInfo(); break; case 9:writeData();exit(0); } } } // 添加 void addInfo(){ system("cls"); printf("\t添加学生信息\n"); printf("请输入学号\n"); isIdSame(count); printf("请输入姓名\n"); scanf("%s",&student[count].name); printf("请输入语文成绩\n"); scanf("%d",&student[count]._chinese); printf("请输入数学成绩\n"); scanf("%d",&student[count]._math); printf("请输入英语成绩\n"); scanf("%d",&student[count]._english); student[count].total=student[count]._chinese+student[count]._english+student[count]._math; printf("%s的信息录入成功\n\n",student[count].name); int choose; printf("1继续 2返回主界面\n"); count++; scanf("%d",&choose); if(choose==1){ addInfo(); } system("cls"); } // 查找 展示结果 void search(){ system("cls"); int id; printf("请输入你想查找学生的学号\n"); scanf("%d",&id); int target = findIndex(student,id); //目标下表 int flag=1;//是否存在要查询的学号 //for循环对比 if(target != -1) { printf("\n\t查询结果\n\n"); showInfo(student[target]); con(); } else{ // 输出查询结果 printf("\n查无此人\n"); con(); } } // 更新 void updata(){ system("cls"); int id; printf("请输入你要修改学生的学号\n"); scanf("%d",&id); int target = findIndex(student,id); if(target<0){ printf("查无此人"); con(); }else{ int flag=1; do{ int choose=0; printf("请输入需要修改的选项\t(1.学号\t2.姓名\t3.语文\t4.数学\t5.英语):\n"); scanf("%d",&choose); switch (choose) { case 1: printf("请输入学号\n"); // scanf("%d",&student[target].id); isIdSame(target); break; case 2: printf("请输入姓名\n"); scanf("%s",&student[target].name); break; case 3: printf("请输入语文成绩\n"); scanf("%d",&student[target]._chinese); break; case 4: printf("请输入数学成绩\n"); scanf("%d",&student[target]._math); break; case 5: printf("请输入英语成绩\n"); scanf("%d",&student[target]._english); break; } student[target].total=student[target]._chinese+student[target]._english+student[target]._math; printf("%s的信息修改成功\n",student[target].name); printf("\n按1继续 按2退出修改\n"); int choose2; scanf("%d",&choose2); if(choose2==1){ flag=1; }else{ flag=0; } }while(flag); } } //删除 void del(){ system("cls"); int id; int target;//目标元素的下标 printf("\n请输入你想删除学生的学号\n"); scanf("%d",&id); target=findIndex(student, id); if(target<0){ printf("\n查无此人\n"); con(); } else{ for(int i=target;i count){ inserCurrentInfo(count); printf("%s的信息插入成功\n", student[count].name); }else{ //不是最后一位 从当前位置 数组全部后移一位 for (int i = count; i >= site; i--){ student[i + 1] = student[i]; } //在当前位置添加学员 inserCurrentInfo(site); printf("%s同学的信息插入成功\n", student[site].name); con(); } } //当前位置插入 void inserCurrentInfo(int site){ printf("请输入学号\n"); isIdSame(site); printf("请输入姓名\n"); scanf("%s", student[site].name); printf("请输入语文成绩\n"); scanf("%d", &student[site]._chinese); printf("请输入数学成绩\n"); scanf("%d", &student[site]._math); printf("请输入英语成绩\n"); scanf("%d", &student[site]._english); student[site].total= student[site]._chinese+student[site]._english+student[site]._math; count++; con(); } // 判断学号是否重复 重复返回1 否则返回0 int find1(struct Student student[],int id) { int temp = 0; for(int i=0;i 主界面
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
X 关闭
X 关闭
- 1转转集团发布2022年二季度手机行情报告:二手市场“飘香”
- 2充电宝100Wh等于多少毫安?铁路旅客禁止、限制携带和托运物品目录
- 3好消息!京东与腾讯续签三年战略合作协议 加强技术创新与供应链服务
- 4名创优品拟通过香港IPO全球发售4100万股 全球发售所得款项有什么用处?
- 5亚马逊云科技成立量子网络中心致力解决量子计算领域的挑战
- 6京东绿色建材线上平台上线 新增用户70%来自下沉市场
- 7网红淘品牌“七格格”chuu在北京又开一家店 潮人新宠chuu能红多久
- 8市场竞争加剧,有车企因经营不善出现破产、退网、退市
- 9北京市市场监管局为企业纾困减负保护经济韧性
- 10市场监管总局发布限制商品过度包装标准和第1号修改单