-
2021-12-13 10:58:25
1. 学生管理系统功能介绍
前面文章里介绍了结构体类型,知道结构体类型里可以存放不同的数据类型,属于一个有序的集合。
这篇文章就使用结构体知识点完成一个小练习,使用结构体+数组设计一个简单的学生管理系统,作为结构体知识点的巩固练习。
功能如下:
(1). 欢迎界面提示
(2). 输入密码登录
(3). 功能: 录入学生信息、按照学号排序、按照成绩排序、输出所有学生信息、输出指定学生信息(学号、姓名、成绩)、计算成绩平均值值输出打印、删除指定学生信息、增加新的学生信息。
(4). 功能模块采用菜单方式选择
2. 框架设计
#include <stdio.h> #include <stdlib.h> void Display_info(void); char buff_user[50]; char buff_password[50]; int main() { int a,i; printf("------欢迎使用xxxx学生管理系统------\n"); for(i=1;i<=3;i++) { printf("请输入用户名:"); scanf("%s",buff_user); printf("请输入密码:"); system("stty -echo"); //系统函数---调用系统的命令 关闭回显 scanf("%s",buff_password); printf("\n"); system("stty echo"); //系统函数---调用系统的命令 开回显 //比较密码是否正确 if(strcmp(buff_user,"wbyq")!=0 || strcmp(buff_password,"123456")!=0) { printf("密码或者用户错误.请重新输入,剩余次数:%d\n",3-i); } else break; } //比较密码是否正确 if(strcmp(buff_user,"wbyq")!=0 || strcmp(buff_password,"123456")!=0) { printf("系统安全退出.\n"); return 0; //exit(); //终止进程 } /* #include <stdlib.h> void exit(int status); 比如: exit(0); */ while(1) { Display_info(); scanf("%d",&a); switch (a) { case 1: printf("选择录取学生信息\n"); break; case 2: printf("输出学生信息\n"); break; //............ default: break; } } return 0; } //显示提示信息 void Display_info(void) { printf("------欢迎使用xxxx学生管理系统------\n"); printf("1. 录取学生信息\n"); printf("2. 输出学生信息\n"); printf("3. 打印成绩平均值\n"); printf("4. 增加学生信息\n"); printf("5. 按照成绩排序输出学生信息.\n"); printf("6. 删除指定学生信息\n"); printf("请选择功能:\n"); }
3. 完整代码
#include <stdio.h> #include <stdlib.h> struct STU { char name[100]; //姓名 int age; //年龄 char number[100]; //学号 float grade;//成绩 }; //全局变量定义区域 char buff_user[50]; char buff_password[50]; struct STU stu_info[100]; int stu_cnt=0; //存放学生总人数 //函数声明区域 void Display_info(void); int SystemLogin(void); void add_info(struct STU *stu,int flag); void grade_sort(struct STU *stu); void del_info(struct STU *stu); void print_info(struct STU *stu); int main() { int number; //1. 登录系统 if(SystemLogin()) { printf("系统安全退出.\n"); exit(0); } //2.执行功能模块 while(1) { Display_info(); scanf("%d",&number); switch (number) { case 1: //录入学生信息 add_info(stu_info,1); break; case 2: //输出学生信息 print_info(stu_info); break; case 3: //打印成绩平均值 break; case 4: //增加学生信息 add_info(stu_info,0); break; case 5: //按照成绩排序输出学生信息 grade_sort(stu_info); break; case 6: //删除指定学生信息 del_info(stu_info); break; case 7: //退出系统 printf("-----系统安全退出------\n"); exit(0); //退出当前进程 default: break; } } return 0; } //显示提示信息 void Display_info(void) { printf("\n\n"); printf("------欢迎使用xxxx学生管理系统------\n"); printf("1. 录入学生信息(按照要求录入信息)\n"); printf("2. 输出学生信息\n"); printf("3. 打印成绩平均值\n"); printf("4. 增加学生信息\n"); printf("5. 按照成绩排序输出学生信息.\n"); printf("6. 删除指定学生信息\n"); printf("7. 退出系统\n"); printf("请选择功能:"); } /* 函数功能: 系统登录 返回值: 0表示成功 1表示失败 */ int SystemLogin(void) { printf("------欢迎使用xxxx学生管理系统------\n"); int i; for(i=1;i<=3;i++) { printf("请输入用户名:"); scanf("%s",buff_user); printf("请输入密码:"); system("stty -echo"); //系统函数---调用系统的命令 关闭回显 scanf("%s",buff_password); printf("\n"); system("stty echo"); //系统函数---调用系统的命令 开回显 //比较密码是否正确 if(strcmp(buff_user,"wbyq")!=0 || strcmp(buff_password,"123456")!=0) { printf("密码或者用户错误.请重新输入,剩余次数:%d\n",3-i); } else break; } //比较密码是否正确 if(strcmp(buff_user,"wbyq")!=0 || strcmp(buff_password,"123456")!=0) { return 1; } return 0; } /* 函数功能: 录入学生信息 int flag :1表示连续增加学生信息 0表示增加单个学生信息 */ void add_info(struct STU *stu,int flag) { int i; int tmp; int addr=stu_cnt; //学生总人数 if(flag) { for(i=addr;i<sizeof(stu_info)/sizeof(stu_info[0]);i++) { printf("请输入学生姓名:"); scanf("%s",stu[i].name); printf("请输入学生年龄:"); scanf("%d",&stu[i].age); printf("请输入学号:"); scanf("%s",stu[i].number); printf("请输入成绩:"); scanf("%f",&stu[i].grade); stu_cnt++; //记录总人数 printf("是否继续录入? 0表示继续 1表示退出"); scanf("%d",&tmp); printf("\n\n"); if(tmp)break; } } else { printf("请输入学生姓名:"); scanf("%s",stu[addr].name); printf("请输入学生年龄:"); scanf("%d",&stu[addr].age); printf("请输入学号:"); scanf("%s",stu[addr].number); printf("请输入成绩:"); scanf("%f",&stu[addr].grade); stu_cnt++; //记录总人数 } } //输出学生信息 void print_info(struct STU *stu) { int i; printf("--------------------------------------------------\n"); for(i=0;i<stu_cnt;i++) { printf("学生姓名:%s\n",stu[i].name); printf("学生年龄:%d\n",stu[i].age); printf("学号:%s\n",stu[i].number); printf("成绩:%f\n",stu[i].grade); printf("\n"); } printf("--------------------------------------------------\n"); } //按照成绩排序输出学生信息 void grade_sort(struct STU *stu) { int i,j; struct STU tmp; for(i=0;i<stu_cnt-1;i++) { for(j=0;j<stu_cnt-1-i;j++) { if(stu[j].grade<stu[j+1].grade) { tmp=stu[j]; stu[j]=stu[j+1]; stu[j+1]=tmp; } } } } //1234567890 //删除指定学生信息 void del_info(struct STU *stu) { char number[100]; int i,j; printf("请输入要删除学生的学号:"); scanf("%s",number); printf("--------------------------------------------------\n"); for(i=0;i<stu_cnt;i++) { if(strcmp(stu[i].number,number)==0) { printf("成功删除以下学生信息:"); printf("学生姓名:%s\n",stu[i].name); printf("学生年龄:%d\n",stu[i].age); printf("学号:%s\n",stu[i].number); printf("成绩:%f\n",stu[i].grade); for(j=i;j<stu_cnt-1;j++) { stu[j]=stu[j+1]; } stu_cnt--; //减去总数量 break; } } if(i==stu_cnt+1) { printf("没有找到该学号.\n"); } printf("--------------------------------------------------\n"); }
更多相关内容 -
学生信息管理系统(数组版)
2019-02-28 19:38:13个人编写的学生信息管理系统,写于大一时期,简单易懂,但是比较繁琐,可以用于大一C语言结课,也可以用于平时自己简化代码做训练。纯手打,来之不易,也是人生第一个偏大点的编程,勿喷 -
【免费】C语言程序设计实训 基于数组的学生信息管理系统
2021-07-18 09:05:06C/C++实现,包括源代码,实验报告。源代码有详细注释。实现了文件存取,学生信息的查找,插入,修改,删除,排序等。 -
学生信息管理系统(C语言数组版)
2021-11-11 19:14:22**#**学生信息管理系统 这个我们是当作一个实践课作业独立完成的。老师就给了几个选题,作为小白,我就选了最简单的。我们没有上课,就老师拉了个群,发个文件,就没了。 要知道,当时我看到都懵了。想着啥都没讲,...****#学生信息管理系统
这个我们是当作一个实践课作业独立完成的。老师就给了几个选题,作为小白,我就选了最简单的。我们没有上课,就老师拉了个群,发个文件,就没了。
要知道,当时我看到都懵了。想着啥都没讲,就让我做个系统,我哪里会。我当时就真以为是我们存款机那种的一个系统。后来,我就报着试一试的心理,去百度看看。毕竟都是个大学生了,什么东西都要自己解决,不会就百度。后来,真的就有,看了人家做出来的东西发现,是我想的深奥了,原来做出来的系统还是个黑框。然后我就自己写了一个。自己也不算厉害那种,然后就都是用很简单的语句。
**##
**功能主要是对学生信息进行添加、删除、查找、显示信息、排序、存档。
实现代码如下:#include<stdio.h> #include<stdlib.h> #include<string.h> void creat(); void info(); void add(); void shanchu(); void search(); void charge(); void show(); void sort(); void save(); int count=0; struct Student{ int num; char name[20]; int English; int math; int chinese; int ave; int total; }student[60],stemp;//结构体,学生信息 int main(){ creat(); return 0; } void creat(){ int a=0; info(); printf("当前文件中有%d条数据\n", count); printf("\t\t\t欢迎使用学生成绩管理系统\n"); printf("1:添加一条学生数据\n"); printf("2:删除一条学生数据\n"); printf("3:查找一条学生数据\n"); printf("4:修改一条学生数据\n"); printf("5:显示所有学生数据\n"); printf("6:按照学生成绩排序\n"); printf("7:学生数据存档并退出\n"); while(1){ scanf("%d",&a); switch(a){ case 1:add();break; case 2:shanchu();break; case 3:search();break; case 4:charge();break; case 5:show();break; case 6:sort();break; case 7:save(); }} } void info(){ FILE*fp=NULL; fp=fopen("student.txt","r"); if(!fp){ printf("打开文件失败\n"); exit(0); } while(1){ fscanf(fp,"%d%s%f%f%f%f",&student[count].num,&student[count].name,&student[count].English,&student[count].math, &student[count].chinese,&student[count].ave,&student[count].total); if(feof(fp)){ break; } count++; } }//打开文件 void add(){ int num=0; printf("请输入学号\n"); scanf("%d",&num); student[count].num=num; printf("请输入姓名\n") ; scanf("%s",student[count].name); printf("请输入英语成绩\n"); scanf("%d",&student[count].English); student[count].total+=student[count].English; printf("请输入数学成绩\n"); scanf("%d",&student[count].math); student[count].total+=student[count].math; printf("请输入语文成绩\n"); scanf("%d",&student[count].chinese); student[count].total+=student[count].chinese; student[count].ave=student[count].total/3.0; printf("%s同学的成绩添加完成\n",student[count].name); count++; }//输入结构体数值进行添加学生的信息 void shanchu(){ int num=0;int k=0;int j=0; printf("请输入你想删除的学生的学号\n"); scanf("%d",&num); for(int i=0;i<count;i++){ if(student[i].num==num){ student[i]=student[i+1]; printf("删除成功\n"); k=i;j=1; count--; for(int i=k+1;i<count;i++) student[i]=student[i+1];}} if(j!=1) printf("查无此人\n"); }//删除学生的信息 void search(){ int num=0; int k=0; printf("请输入你想查找的学生的学号\n"); scanf("%d",&num); for(int i=0;i<count;i++){ if(student[i].num==num){ printf("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n"); printf("学号:%d 姓名:%s 英语:%d 数学:%d 语文:%d 总分:%d 平均分:%d\n",student[i].num,student[i].name, student[i].English,student[i].math,student[i].chinese,student[i].total,student[i].ave); printf("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");k=1;} if(k!=1) printf("查无此学生\n") ; } }//查找学生的信息 void charge(){ int num=0; printf("请输入你想修改的学生的学号\n"); scanf("%d",&num); for(int i=0;i<count;i++){ if(student[i].num==num){ student[i].total=0;student[i].ave=0; printf("请输入该学生的学号\n"); scanf("%d",&student[i].num); printf("请输入该学生的姓名\n"); scanf("%s",student[i].name); printf("请输入该学生的英语成绩\n"); scanf("%d",&student[i].English); student[i].total+=student[i].English; printf("请输入该学生的数学成绩\n"); student[i].total+=student[i].math; scanf("%d",&student[i].math); printf("请输入该学生的语文成绩\n"); scanf("%d",&student[i].chinese); student[i].total+=student[i].chinese; student[i].ave=student[i].total/3.0; printf("修改成功\n"); printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n"); printf("学号:%d 姓名:%s 英语:%d 数学:%d 语文:%d 总分:%d 平均分:%d\n",student[i].num,student[i].name, student[i].English,student[i].math,student[i].chinese,student[i].total,student[i].ave); printf("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n"); } else printf("查无此学生\n"); } }//找到该学生进行新的赋值达到修改学生的信息的目的 void show(){ if(count==0) printf("无信息\n"); else{ for(int i=0;i<count;i++){ printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n"); printf("学号:%d 姓名:%s 英语:%d 数学:%d 语文:%d 总分:%d 平均分:%d\n",student[i].num,student[i].name, student[i].English,student[i].math,student[i].chinese,student[i].total,student[i].ave); printf("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");//显示所有学生的信息 } } } void sort(){ if(count<1) printf("无学生信息\n"); else{ for(int i=0;i<count-1;i++){ for(int j=0;j<count-1-i;j++){ if(student[j].total>student[j+1].total){ stemp=student[j]; student[j]=student[j+1]; student[j+1]=stemp;}}} printf("排序完成\n"); }}//通过冒泡排序法把所有学生成绩按总分进行排序 void save(){ FILE * fp = NULL; fp = fopen("student.txt", "w"); for (int i = 0; i < count; i++){ fprintf(fp, "%d\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n", student[i].num, student[i].name, student[i].English, student[i].math, student[i].chinese, student[i].ave, student[i].total); } printf("数据保存成功,程序已退出\n"); exit(0);}//保存数据到student.txt中
输出如下:
我觉得我的代码是最简单的了,就感觉简单的不能再简单了,根本没有任何复杂的语句,一看就能看懂吧。
多看代码呀!! -
学生信息管理系统,数组实现
2009-10-25 21:08:49数组实现学生信息管理系统,有文件实现保存,但还不够完善 -
C语言学生信息管理系统--结构体数组存储.zip
2021-11-24 20:09:26C语言初学者 -
C语言大作业—学生信息管理系统1.rar
2020-06-06 14:39:16大一写的结课作业,代码用到了指针、文件、数组、结构体、函数,包括增删改查、保存信息到文件和成绩排名等功能,欢迎大家下载使用。 -
基于数组的学生信息管理系统
2019-07-11 02:06:34基于数组的学生信息管理系统 编写并调试程序,实现学校各专业班级学生信息的管理。10个学生的信息存储在文件studentInit.dat中。在头文件student.h中定义学生信息的结构体类型,包括:学号、姓名、专业、班级、3门... -
基于动态数组的学生信息管理系统
2018-07-05 23:15:21表单使用密码、单选、复选、列表、文件域等控件学生信息实现分页浏览。这是课上老师要求的课后作业 是没有完善的 因为个人能力有限 但还是可以运行,有积分多的可以下载 谢谢了 就是想下个资源 但是没积分了 -
基于链表的学生信息管理系统之C语言实现(分享版).rar
2020-05-01 23:10:47学习【数据结构课程】中线性表知识,自己动手做的【学生信息 管理 系统】。 目的:重在功能实现,思考探索。 编程语言:C IDE:VC++6.0 基础功能:增、删、查、改。 【扩展功能: 1.数据的保存、读取; 2.账号的... -
java大作业之学生信息管理系统.zip
2020-12-23 16:27:49该系统使用了集合类ArrayList数组、swing组件,用文件操作FileinputStream、FileoutputStream来进行读写文件,完成一个相对来说比较简单易懂用户界面的学生信息管理系统。适合学生用来参考课程设计。 -
学生成绩管理系统(结构体数组版)
2018-10-21 12:28:26C语言入门,学生成绩管理系统,使用结构体数组储存数据,可以根据姓名,分数排序,统计不同科目的平均分等等。 -
链表+数组学生信息管理系统c语言
2016-02-19 21:28:15读文件,添加,删除,排序等,课程设计题目,看不太不懂可以问我 -
C语言程序设计实训(数组实现学生信息管理系统)
2022-04-08 17:24:05printf("\t\t\t * 学生信息管理系统 * \n\n"); printf("\t\t\t ******************************************************\n\n"); printf("\t\t\t*********************系统功能菜单*************************\n"); ...- 事先存入的数据:
- 菜单:
- 系统帮助及说明:
- 写入学生信息:
该写入仅写入数组并不存入文件。
- 读出学生信息
- 将学生信息存入文件中
此时文件中数据为:
- 输出每门课程最高分:
- 随机读取信息:
- 专业平均成绩升序(简单选择排序):
- 班级平均成绩降序(冒泡)::
- 班级单科成绩升序(插排):
- 综合查找:
- 输出所有信息:
- 删除学生信息:
源码如下(原创,如用请点赞):
-
#include<iostream> #include<string.h> #include<stdlib.h> #include<iomanip> #include<fstream> #include<time.h> #include<typeinfo> #include<conio.h> #define M 1000 int length; int l=5; char a[10],b[10],c[10],d[10],e[10],f[10],g[10];//标题 struct student { char num[10];//学号 char name[10];//姓名 char spec[10];//专业 char stu_class[10];//班级 int score1; int score2; int score3; }stu[30]; int Init()//初始化 { int i = 0; FILE *p = fopen("1.txt", "r"); //打开文件 if(p==NULL) return 0; fscanf(p,"%s%s%s%s%s%s%s",&a,&b,&c,&d,&e,&f,&g);//读取标题 while (!feof(p)) //检测流上的文件结束符,如果文件结束,则返回非0值 { //将文件中数据读取到结构体数组 fscanf(p,"%s%s%s%s%d%d%d",&stu[i].num,&stu[i].name,&stu[i].spec,&stu[i].stu_class,&stu[i].score1,&stu[i].score2,&stu[i].score3); i++; } length = i; fclose(p); return 1; } void Input()//从键盘输入一个学生信息存入文件和结构体数组。 { loop1:; printf("请输入学生信息:\n"); printf(" 学号 姓名 专业 班级 成绩1 成绩2 成绩3\n"); int i = length; char num_stu[10]; scanf("%s%s%s%s%d%d%d",&stu[i].num,&stu[i].name,&stu[i].spec,&stu[i].stu_class,&stu[i].score1,&stu[i].score2,&stu[i].score3); int n; for(n=0;n<99;n++) { if(stu[i].num==num_stu) { printf("学号冲突,请重新输入"); goto loop1; } } FILE *p = fopen("1.txt", "c"); //打开文件 fclose(p); l=l+1; printf("写入信息成功!\n"); length++; } void Output1()//输入学号,将对应的学生信息格式化输出。 { char *num; printf("请输入查询的学号:"); scanf("%d",num); printf("学号 姓名 专业 班级 成绩1 成绩2 成绩3\n"); for(int i=0;i<length;i++) if(strcmp(stu[i].num,num)==0) printf("%s %s %s %s %d %d %d \n",stu[i].num,stu[i].name,stu[i].spec,stu[i].stu_class,stu[i].score1,stu[i].score2,stu[i].score3); } void Output(struct student stu[M])//查询函数 { int i=0; char xh[25]; if(l==0) { printf("目前没有学生信息\n"); return; } else { printf("请输入查看学生的学号\n"); scanf("%s",&xh); for(i=0;i<l;i++) { if(strcmp(stu[i].num,xh)==0) { printf("%s %s %s %s %d %d %d \n",stu[i].num,stu[i].name,stu[i].spec,stu[i].stu_class,stu[i].score1,stu[i].score2,stu[i].score3); } } } } void all()//输出所有信息 { printf("学号 姓名 专业 班级 成绩1 成绩2 成绩3 总成绩 平均成绩 \n"); for(int i=0;i<length;i++) { int sum=stu[i].score1+stu[i].score2+stu[i].score3; int ave=sum/3; printf("%s %s %s %s %d %d %d %d %d \n",stu[i].num,stu[i].name,stu[i].spec,stu[i].stu_class,stu[i].score1,stu[i].score2,stu[i].score3,sum,ave); } } void help()/*帮助界面*/ { printf("\n\t\t\t0.欢迎使用系统帮助!\n"); printf("\n\t\t\t1.初次进入系统后,请先选择增加学生信息;\n"); printf("\n\t\t\t2.按照菜单提示键入数字代号;\n"); printf("\n\t\t\t3.增加学生信息后,切记保存;\n"); printf("\n\t\t\t4.谢谢您的使用!\n"); } void Save()//将某个学生信息存入一个文件。 { printf("请输入学生信息:\n"); printf(" 学号 姓名 专业 班级 成绩1 成绩2 成绩3\n"); int i = length; scanf("%s%s%s%s%d%d%d",&stu[i].num,&stu[i].name,&stu[i].spec,&stu[i].stu_class,&stu[i].score1,&stu[i].score2,&stu[i].score3); FILE *p = fopen("1.txt", "a"); //打开文件 fprintf(p,"\n%s %s %s %s %d %d %d\n",stu[i].num,stu[i].name,stu[i].spec,stu[i].stu_class,stu[i].score1,stu[i].score2,stu[i].score3); printf("%s %s %s %s %d %d %d",stu[i].num,stu[i].name,stu[i].spec,stu[i].stu_class,stu[i].score1,stu[i].score2,stu[i].score3); l=l+1; fclose(p); printf("写入文件成功!\n"); } void del(struct student stu[M])//删除函数 { int j,index=0,k=l; char xh[25]; printf("所要删除的学生学号为:\n"); scanf("%s",xh); do{ for(j=0;j<l;j++) { if(strcmp(stu[j].num,xh)==0) { for(j=index;j<l;j++) stu[j]=stu[j+1]; l--; if(l<k) printf("删除成功\n"); } index++; } } while(j==l); printf("没有你要删除的学生信息\n"); FILE *p = fopen("1.txt", "w"); //打开文件 for(int i=0;i<length;i++) { fprintf(p,"%s %s %s %s %d %d %d \n",stu[i].num,stu[i].name,stu[i].spec,stu[i].stu_class,stu[i].score1,stu[i].score2,stu[i].score3); printf("%s %s %s %s %d %d %d \n",stu[i].num,stu[i].name,stu[i].spec,stu[i].stu_class,stu[i].score1,stu[i].score2,stu[i].score3); } fclose(p); printf("写入文件成功!\n"); } void Max()//求所有学生某门课程的最高分及对应的学生的姓名。 { int i; int max[3]={0,0,0}; for(i=0;i<length;i++) if(max[0]<stu[i].score1) max[0]=stu[i].score1; printf("课程1最高分:%d分----",max[0]); for(i=0;i<length;i++) if(stu[i].score1 == max[0]) printf("%s ",stu[i].name); printf("\n"); for(i=0;i<length;i++) if(max[1]<stu[i].score2) max[1]=stu[i].score2; printf("课程2最高分:%d分----",max[1]); for(i=0;i<length;i++) if(stu[i].score2 == max[1]) printf("%s ",stu[i].name); printf("\n"); for(i=0;i<length;i++) if(max[2]<stu[i].score3) max[2]=stu[i].score3; printf("课程3最高分:%d分----",max[2],stu[i].name); for(i=0;i<length;i++) if(stu[i].score3 == max[2]) printf("%s ",stu[i].name); printf("\n"); } void Fetch()//从文件中随机读取某个学生的信息。 { int i = time(NULL) % length; printf("第%d名学生\n",i+1); printf(" 学号 姓名 专业 班级 成绩1 成绩2 成绩3\n"); printf("%s %s %s %s %d %d %d \n",stu[i].num,stu[i].name,stu[i].spec,stu[i].stu_class,stu[i].score1,stu[i].score2,stu[i].score3); } void Sort_select()//按专业总平均成绩由低到高进行简单选择排序。 { struct student tmp; char str[6]; int i,j,t,n,k; float avg[length],avg_temp; printf("请输入专业:\n"); scanf("%s",str); for(i=0;i<length;i++) avg[i] = float(stu[i].score1 + stu[i].score2 + stu[i].score3) / 3; //简单选择排序 for(i=0; i<length; i++) //做n-1趟选取 { k = i; for(j=i+1;j<=length;j++) if(avg[j] < avg[k] && strcmp(stu[i].spec,str)==0 && strcmp(stu[j].spec,str)==0) k = j; //k为最小值 if(i!=k)//交换 { tmp=stu[k]; avg_temp = avg[k]; stu[k]=stu[i]; avg[k] = avg[i]; stu[i]=tmp; avg[i] = avg_temp; } } printf(" 学号 姓名 专业 班级 成绩1 成绩2 成绩3 平均分\n"); for(i=0;i<length;i++) if(strcmp(stu[i].spec,str)==0) printf("%5s %-6s %3s %s %3d %3d %3d %-6.2f\n",stu[i].num,stu[i].name,stu[i].spec,stu[i].stu_class,stu[i].score1,stu[i].score2,stu[i].score3,avg[i]); } void Sort_buble()//按班级总平均成绩由高到低进行冒泡排序。 { struct student tmp; char str[6]; float avg[length],avg_temp; int i,j; printf("请输入班级:\n"); scanf("%s",str); for(i=0;i<length;i++) avg[i] = float(stu[i].score1 + stu[i].score2 + stu[i].score3) / 3; //冒泡排序 for(i=0;i<length;i++) for(j=0;j<length;j++) if(avg[i]>avg[j] && strcmp(stu[i].stu_class,str)==0 && strcmp(stu[j].stu_class,str)==0) { tmp = stu[i]; avg_temp = avg[i]; stu[i] = stu[j]; avg[i] = avg[j]; stu[j] = tmp; avg[j] = avg_temp; } printf(" 学号 姓名 专业 班级 成绩1 成绩2 成绩3 平均分\n"); for(i=0;i<length;i++) if(strcmp(stu[i].stu_class,str)==0) printf("%5s %-6s %3s %s %3d %3d %3d %-6.2f\n",stu[i].num,stu[i].name,stu[i].spec,stu[i].stu_class,stu[i].score1,stu[i].score2,stu[i].score3,avg[i]); } void Sort_insert()//按课程成绩由低到高进行直接插入排序。 { int i,j,len=0; char str[6]; int m; struct student tmp; struct student insert[100]; printf("请输入班级:\n"); scanf("%s",str); printf("请输入科目 :\n"); scanf("%s",m); if(m==1) { for(i=0;i<length;i++) if(strcmp(stu[i].stu_class,str)==0) //筛选出某个班上的学生进行插入排序 { insert[len] = stu[i]; len++; } for(i=1;i<len;i++)//循环从第2个元素开始 { if(insert[i].score1 < insert[i-1].score1) { tmp = insert[i]; for(j = i-1; j >= 0 && insert[j].score1 > tmp.score1; j--) insert[j+1] = insert[j]; insert[j+1] = tmp; } } printf(" 学号 姓名 专业 班级 成绩1 成绩2 成绩3\n"); for(i=0;i<len;i++) printf("%5s %-6s %3s %s %3d %3d %3d\n",insert[i].num,insert[i].name,insert[i].spec,insert[i].stu_class,insert[i].score1,insert[i].score2,insert[i].score3); } if(m==2) {for(i=0;i<length;i++) if(strcmp(stu[i].stu_class,str)==0) //筛选出某个班上的学生进行插入排序 { insert[len] = stu[i]; len++; } for(i=1;i<len;i++)//循环从第2个元素开始 { if(insert[i].score2 < insert[i-1].score2) { tmp = insert[i]; for(j = i-1; j >= 0 && insert[j].score1 > tmp.score1; j--) insert[j+1] = insert[j]; insert[j+1] = tmp; } } printf(" 学号 姓名 专业 班级 成绩1 成绩2 成绩3\n"); for(i=0;i<len;i++) printf("%5s %-6s %3s %s %3d %3d %3d\n",insert[i].num,insert[i].name,insert[i].spec,insert[i].stu_class,insert[i].score1,insert[i].score2,insert[i].score3); } if(m=3) { for(i=0;i<length;i++) if(strcmp(stu[i].stu_class,str)==0) //筛选出某个班上的学生进行插入排序 { insert[len] = stu[i]; len++; } for(i=1;i<len;i++)//循环从第2个元素开始 { if(insert[i].score3 < insert[i-1].score3) { tmp = insert[i]; for(j = i-1; j >= 0 && insert[j].score1 > tmp.score1; j--) insert[j+1] = insert[j]; insert[j+1] = tmp; } } printf(" 学号 姓名 专业 班级 成绩1 成绩2 成绩3\n"); for(i=0;i<len;i++) printf("%5s %-6s %3s %s %3d %3d %3d\n",insert[i].num,insert[i].name,insert[i].spec,insert[i].stu_class,insert[i].score1,insert[i].score2,insert[i].score3); } } void Search()//查找某班总分在某分数段以上的学生 { int i,k=0,score; int sum=stu[i].score1+stu[i].score2+stu[i].score3; char str[6]; printf("请输入班级和分数:\n"); scanf("%s%d",str,&score); printf(" 学号 姓名 专业 班级 成绩1 成绩2 成绩3 总分\n"); for(i=0;i<length;i++) if(strcmp(stu[i].stu_class,str)==0 && stu[i].score1+stu[i].score2+stu[i].score3 > score) { printf("%5s %-6s %3s %s %3d %3d %3d %3d\n",stu[i].num,stu[i].name,stu[i].spec,stu[i].stu_class,stu[i].score1,stu[i].score2,stu[i].score3,sum); k++; } printf("%s班总分%d以上的一共有%d人。\n",str,score,k); } void Deletedatd()//删除信息 { int i, j, flag = 0; char m; printf("请输入想删除的信息:\n"); scanf("%lld", m); for (i = 0; i < l; i++) { if (stu[i].num==&m) { for (j = i; j < l + 1; j++) { stu[j] = stu[j + 1]; } } } getch(); } int main() { int i,j; if(Init()==0) { printf("文件不存在!"); return 0; } system("color 0f");//变色 int choice; int num; //num为每次输入的人数 static int k; // k为总人数 且会变化 int label_of_save=0;//存盘判据 while(1)//死循环 支持多次不同操作 { printf("\t\t\t ******************************************************\n\n"); printf("\t\t\t * 学生信息管理系统 * \n\n"); printf("\t\t\t ******************************************************\n\n"); printf("\t\t\t*********************系统功能菜单*************************\n"); printf("\t\t\t ---------------------- ---------------------- \n"); printf("\t\t\t ********************************************* \n"); printf("\t\t\t * 0.系统帮助及说明 * * 1.写入学生信息 * \n"); printf("\t\t\t ********************************************* \n"); printf("\t\t\t * 2.查询学生信息 * * 3.保存学生信息 * \n"); printf("\t\t\t ********************************************* \n"); printf("\t\t\t * 4.课程最高分 * * 5.随机读取信息 * \n"); printf("\t\t\t ********************************************* \n"); printf("\t\t\t * 6.专业平均成绩升序 * * 7.班级平均成绩降序 * \n"); printf("\t\t\t ********************************************* \n"); printf("\t\t\t * 8.班级单科成绩升序 * * 9.综合查找 * \n"); printf("\t\t\t ********************************************* \n"); printf("\t\t\t * 10.输出所有信息 * * 11.删除学生信息 * \n"); printf("\t\t\t ********************************************* \n"); printf("\t\t\t * 12.退出系统 * \n"); printf("\t\t\t ********************** \n"); printf("\t\t\t ---------------------- ---------------------- \n"); scanf("%d",&choice);//功能选择 int j;//支持增补的变量保障 if(choice>=0&&choice<=13) { switch(choice) { case 0: help(); break; case 1: Input(); break; case 2: Output(stu); break; case 3: Save(); break; case 4: Max(); break; case 5: Fetch(); break; case 6: Sort_select(); break; case 7: Sort_buble(); break; case 8: Sort_insert(); //my_Sort_insert(); break; case 9: Search(); break; case 11: del(stu);//删除 break; case 10: all(); break; case 12: printf("\n ~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); //退出提示 printf(" Goodbye! \n"); printf(" ~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); exit(0);//将程序退出 } } else //没有按规范选择功能,要进行错误提示 //错误提示 { printf("\n ~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); printf(" error input! \n"); printf(" ~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); } } return 0; } void write() { int i = length; FILE *p = fopen("1.txt", "w"); //打开文件 fprintf(p,"%s %s %s %s %s %s %s\n",a,b,c,d,e,f,g); for(i=0;i<length;i++) fprintf(p,"%s %s %s %s %d %d %d",stu[i].num,stu[i].name,stu[i].spec,stu[i].stu_class,stu[i].score1,stu[i].score2,stu[i].score3); fclose(p); }
-
基于数组和链表的学生信息管理系统(c语言程序设计实训)
2021-07-26 11:38:321.基于数组的“学生信息管理系统” 实验内容: 编写并调试程序,实现学校各专业班级学生信息的管理。定义学生信息的结构体类型,包括:学号、姓名、专业、班级、3门成绩。N定义为符号常量,定义N名学生信息的结构体... -
学生管理系统数组版
2018-09-08 21:00:11纯c语言开发,包含三个文件,头文件,main.c studentMessage.c 。可以存在txt文件,快速排序,希尔排序,输出函数,寻找最高分学生信息,能够输出所有最高分学生信息。 -
C语言学生管理系统(结构体数组)
2021-04-09 17:03:17简单的学生管理系统,使用C语言编写。 功能 拥有增、删、改、查、打印、文件读写、搜索以及排序功能。 环境 推荐使用VS2015或以上版本(支持C11或以上)的编译器运行代码。 结构 数据结构为结构体数组。 运行效果图...简介
简单的学生管理系统,使用C语言编写。功能
拥有增、删、改、查、打印、文件读写、搜索以及排序功能。环境
推荐使用VS2015或以上版本(支持C11或以上)的编译器运行代码。结构
数据结构为结构体数组。运行效果图:
整份源码:
#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<stdio.h> #include<string.h> #include<math.h> #include<stdlib.h> using namespace std; struct Struct { char Name[10]; int Num; double Chi, Mat, Eng; }; Struct text[5000] = { { "张珊",1,98,99,90 }, { "李思",2,88,99,95 }, { "王武",3,89,100,91 }, { "马柳",4,99,101,88 }, { "王琦",5,96,91,89 } }; void select(Struct *p, int n) { int i = 0; while (i < n - 1) { int j = i + 1; while (j < n - 1) { if (p[i].Num > p[j].Num) { Struct a = p[i]; p[i] = p[j]; p[j] = a; } j++; } i++; } cout << "------------------------ 排序完成! ------------------------" << endl; } void save(Struct*p) { FILE*fp; fp = fopen("NOTE.s", "w"); int i = 0; while (p[i].Num) { fwrite(&p[i], 1, sizeof(p[i]), fp); i++; } fclose(fp); } void load() { Struct A; FILE*fp = fopen("NOTE.s", "r"); if (!fp) return; int i = 0; while (fread(&A, 1, sizeof(A), fp) > 0) { text[i++] = A; } fclose(fp); } void bubble(Struct*p,int N)//冒泡是正确的,但一被引用就错误了 { int i = 0, j; while (i < N - 1) { j = 0; while (j < N - 1) { if (p[j].Num < p[j + 1].Num) { Struct a = p[i]; p[i] = p[i + 1]; p[i + 1] = a; } j++; } i++; } } void glance(Struct *p,int N) { puts("表格如下:"); printf("姓名\t座号\t语文\t数学\t英语\t三总\t平均\n"); int n = 0; int i = 0,j=0; while(i<N) { if(p[i].Num<1) { i++; continue; } printf("%s\t%d\t%0.2f\t%0.2f\t%0.2f\t%0.2f\t%0.2f\n", p[i].Name, p[i].Num, p[i].Chi, p[i].Mat, p[i].Eng,(p[i].Chi+ p[i].Mat+p[i].Eng),(p[i].Chi+p[i].Mat+p[i].Eng)/3); j++; if ((p[i].Chi + p[i].Mat + p[i].Eng) > (p[i + 1].Chi + p[i + 1].Mat + p[i + 1].Eng)) n = p[i].Num; else n = p[i - 1].Num; i++; } i = 0; puts("优秀学生:"); while (p[i].Num) { if (n == p[i].Num) { printf("姓名\t座号\t语文\t数学\t英语\t三总\t平均\n"); printf("%s\t%d\t%0.2f\t%0.2f\t%0.2f\t%0.2f\t%0.2f\n", p[i].Name, p[i].Num, p[i].Chi, p[i].Mat, p[i].Eng, (p[i].Chi + p[i].Mat + p[i].Eng), (p[i].Chi + p[i].Mat + p[i].Eng) / 3); break; //只能显示一个数据,GG.. } i++; } printf("-----------------------共%d个学生信息-----------------------",j); puts(""); } void add(Struct *p)//添加一个结构体成员变量 { int i = 0; while (p[i].Num ) i++; printf("请按顺序输入”姓名、座号、语数英成绩:【用空格间隔】\n"); scanf("%s%d%lf%lf%lf", &p[i].Name, &p[i].Num, &p[i].Chi, &p[i].Mat, &p[i].Eng); int n = 0; while (p[n].Num) { if (p[n].Num == p[i].Num || 0 == p[i].Num) { int j = n+1; while (p[j].Num) { if (p[n].Num == p[i].Num || 0 == p[i].Num) { puts("座号不能重复或等于零,请重新输入!"); text[i] = { "无无",-1,0,0,0 }; break; } j++; } if (p[n + 1].Num == p[i].Num || 0 == p[i].Num) break; } n++; } if(p[i].Num>0) puts("--------------------------输入成功!--------------------------"); } void del(Struct*p) { char n[10],i=0; printf("请输入你要删除的数据的姓名或座号:"); scanf_s("%s", &n, sizeof(n)); while (p[i].Num) { if(strcmp(n, p[i].Name) == 0||atof(n) == p[i].Num) { text[i] = { "无",-1,0,0,0 }; printf("\n--------------------------清除成功!--------------------------\n"); break; } i++; } } void rev(Struct *p) { { char n[10], i = 0; printf("请输入你要修改数据的姓名或座号:"); scanf_s("%s", &n, sizeof(n)); while (p[i].Num) { if (strcmp(n, p[i].Name) == 0 || atof(n) == p[i].Num) { printf("数据已找到!请按顺序输入”姓名、座号、语数英成绩进行修改:【用空格间隔】\n\n"); printf("姓名\t座号\t语文\t数学\t英语\n"); printf("%s\t%d\t%0.2f\t%0.2f\t%0.2f\n", p[i].Name, p[i].Num, p[i].Chi, p[i].Mat, p[i].Eng); Struct t = p[i]; scanf("%s%d%lf%lf%lf", &p[i].Name, &p[i].Num, &p[i].Chi, &p[i].Mat, &p[i].Eng); int n = 0; while (p[n].Num) { if (p[n].Num == p[i].Num || 0 == p[i].Num) { int j = n + 1; while (p[j].Num) { if (p[j].Num == p[i].Num || 0 == p[i].Num) { puts("座号不能重复或等于零,请重新输入!"); text[i] = t; break; } j++; } if (p[n + 1].Num == p[i].Num || 0 == p[i].Num) break; } n++; } if (p[i].Num != t.Num/*&&p[i].Chi != t.Chi&&p[i].Eng != t.Eng&&p[i].Mat != t.Mat*/) printf("\n--------------------------修改成功!--------------------------\n"); break; } i++; } } } void ser(Struct *p) { { char n[10], i = 0; printf("请输入你要查找数据的姓名或座号:"); scanf_s("%s", &n, sizeof(n)); printf("%s %f\n", n, atof(n)); while (p[i].Num) { if (strcmp(n, p[i].Name) == 0 || atof(n) == p[i].Num) { printf("\n--------------------------搜索成功!--------------------------\n"); printf("姓名\t座号\t语文\t数学\t英语\n"); printf("%s\t%d\t%0.2f\t%0.2f\t%0.2f\n", p[i].Name, p[i].Num, p[i].Chi, p[i].Mat, p[i].Eng); break; } i++; } if(p[i].Num==0) puts("你输入的姓名或座号不存在!"); } } int main() { load(); int i = 1; char n; printf("1、浏览所有信息\n2、添加信息\n3、删除信息\n4、修改信息\n5、查找信息\n6、排序\n0、退出\n\n"); while (i) { printf("请选择:"); scanf_s("%d", &n); switch (n) { case 1: { glance(text,_countof(text)); //cout << _countof(text); break; } case 2: { add(text); save(text); break; } case 3: { del(text); save(text); break; } case 4: { rev(text); save(text); break; } case 5: { ser(text); break; } case 6: { //bubble(text, _countof(text));//失败 select(text,_countof(text)); break; } case 0: { return 0; } default: { puts("你的输入无效,请重新输入!"); } } i++; if (i == 4) { i = 1; printf("1、浏览所有信息\n2、添加信息\n3、删除信息\n4、修改信息\n5、查找信息\n6、排序\n0、退出\n\n"); } } return 0; }
-
Java实现:学生管理系统(数组,for循环,方法)
2021-07-15 19:13:21/* * 学生管理系统 * 学生信息:班级姓名数组:String [][]stuNames * 班级成绩数组:int [][]stuScores; * 功能如下菜单中有列出 */ public class StudentManageSys { static Scanner scanner = new Scanner... -
【C/C++/初学者】基于结构体数组的学生信息管理系统
2022-04-26 20:53:42printf("按任意键进入学生信息管理系统!\n"); system("pause"); //暂停指令 system("cls"); //清屏指令 menu(); } } //函数功能:显示学生信息 √ void watch() { int i; printf("\n--------【显示学生信息】------... -
C语言数组实现学生信息管理系统
2017-03-14 15:33:37单纯只用多个数组管理学生成绩信息,不使用结构体,该程序最主要的难点是依据学号或总成绩对学生信息进行排序,借助了临时数组来标记排好序的下标。 -
Java_学生信息管理系统——数组版——尝试将main函数单独放了一个类,并加了文件
2021-03-15 00:38:05147 }148 }149 if(flag==false)150 {151 System.out.println("该学生不存在!");152 }153 }154 public voidupdateStudent()155 {156 Scanner input=newScanner(System.in);157 String s;158 String a, b,f;159 intc;... -
java实现学生信息管理系统(对象数组实现)
2019-01-09 20:17:23学生管理类 StudentAdmin.java3.主程序 StudentTest.java四、运行结果1.添加学生功能2.查找学生功能3.根据编号更新学生基本信息功能4.根据学生编号删除学生功能5.根据学生编号录入学生各门成绩6.根据某门成绩进行... -
C语言学生成绩管理系统实验报告(数组)(63页)-原创力文档
2021-05-20 16:13:30JOUKKAL 0T NORTHWKSTZRN POLTTECHHICAL UHMRfiTTT ltDfG Dfe COUXGE《c语言应用》实验报告题目学生成绩管理系统(数组版)专业名称 班 级 学 号 学生姓名 指导教师 完成时间TOC \o "1-5" \h \z \o "Current Document... -
学生成绩管理系统(结构体数组)
2021-11-01 20:58:40#include <stdio.h> #include <stdlib.h> #include <string.h> /*定义学生结构体*/ struct Student { char ID[20]; char Name[20];.../*声明学生数组及学生数量*/ struct Student stu -
数组实现c语言学生成绩管理系统
2021-05-10 19:42:53c语言管理系统 牛~~ /*引用库函数*/ #include<stdio.h> #include<stdlib.h> #include<string.h> /*定义结构体数组*/ typedef struct { char num[12]; /*学号*/ char name[20]; /*姓名*/ ... -
c++实现学生管理系统
2022-02-27 21:58:19此学生学籍管理系统包括各个学生的学号,姓名,年龄,性别,C语言成绩,高数成绩,英语成绩,通过使用对象数组,与文件操作相结合,对学生信息进行修改与保存。 1.查询学生信息 对特定学号的学生信息进行查询,如果... -
学生信息管理系统(教务系统)—— C/C++数组实现
2020-07-17 17:01:52stu_list 学生信息文件(初始为空,从系统录入) 二、代码 /* *** 学生管理系统 *** */ #include <stdio.h> #include <windows.h> #include <time.h> #include <conio.h> #define N 100 ... -
基于数组实现学生信息管理系统
2019-08-17 13:21:56#include #include #include #include #include...//从文件中读取学生信息 switch(ch) { case '1': add();getchar();break;//添加 case '2': dele();getchar();break;//删除 case '3': query();getchar();break;//查询 ... -
基于链表和数组的学生信息管理系统(C语言)可运行.cpp文件
2022-05-27 19:44:47基于数组的学生信息管理系统 基于链表的学生信息管理系统 C语言实现 可运行 小学期作业 大连某211大学大二下学期小学期作业 -
存入文件的学生信息管理系统
2018-08-03 16:06:16简单而实用的IO 文件操作的黑框框程序哦,其中字体有颜色的哦!