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"); }