#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #include<string.h> #define XMXH 10//姓名的范围 #define N 1000//定义为1000名的学生 void BXXHXM();//按照学号进行排序 void menu();//菜单 void del();//删除某人信息; void insert();//插入函数 void seek();//查找函数 void help(); void shuru(); //使用说明 //先定义一个结构体来存储学生的信息 struct student { char StudentXh[XMXH + 1]; char StudentName[XMXH + 1]; };//定义一个结构体来存储 typedef struct student student; student stu[N]; int k = 1, n = 0, m = 0; //主函数 int main() { while (k) { menu(); } system("pause"); return 0; } //查找学生的信息 查 void seek() { int i, n, m; char c[20]; printf("\t--------------------------------\n"); printf("\t\t\t1 按照学号进行查找\n"); printf("\t\t\t2 按照姓名进行查找\n"); printf("\t\t\t3 退出查找模式\n"); printf("\t--------------------------------\n"); while (1)//用1进入循环 { printf("请选择您要选择的功能:"); char n; scanf("%s", &n); m = 0; while (n < 0 || n >4) { while (getchar() != '\n'); printf("请输入1--3之间的数字:\n"); scanf("%d", &n); } switch (n) { case 1: printf("请输入要查询学生的学号:\n"); scanf("%s", &c); for (i = 0; i < n; i++) if (strcmp(c, stu[i].StudentXh) == 0) { m = 1; printf("学生学号\t\t学生姓名\t\t\n"); printf("-----------------------------------------------------\n"); printf("%s\t\t%s\t\t\n", stu[i].StudentXh, stu[i].StudentName); } if (0 == m) printf("该学号不存在,如果您要退出请按3退出键\n"); break; case 2: printf("请输入要查找的学生姓名:\n"); scanf("%s", c); for (i = 0; i < n; i++) if (strcmp(stu[i].StudentName, c) == 0) { m = 1; printf("\t---------------------------\n"); printf("学生学号\t\t学生姓名\t\t\\n"); printf("-----------------------------\n"); printf("%s\t\t%s\t\t", stu[i].StudentXh, stu[i].StudentName); } //这个地方不用在加break了 之前加入后会导致一直在循环中出不来,执行完后退出 if (0 == m) printf("该姓名不存在!\n"); case 3:return; defaault: printf("请在1--3之间选择\n"); } } } //按照学号对学生进行删除 删 void del() { int i, j, h = 0; char c[XMXH + 1]; printf("请输入要删除的学号"); scanf("%s", c); for (i = 0; i < n; i++) { if (strcmp(stu[i].StudentXh, c) == 0) { h = 1; for (j = i; j < n - 1; j++)//前面的删除后将后面的加一 { stu[j] = stu[j + 1]; } } } if (0 == h)//用h来判断情况 { printf("学号不存在请重新输入\n"); } if (1 == h) { printf("删除成功!"); n--; } system("pause"); }// //添加学生的 增 void insert() { int i = n, j, h; int m; printf("请输入要插入的学生的数量:\n"); scanf("%d", &m); while (m < 0 || m >20) { while (getchar() != '\n'); printf("输入错误或添加学生过多请重新输入:"); scanf("%d", &m); } if (m > 0) { do { h = 1; while (h)//进入循环 { h = 0;//再将h=0用来直接退出 printf("请输入第%d位学生的学号:\n", i + 1); scanf("%s", stu[i].StudentXh); while(1) { if(strspn(stu[i].StudentXh,"abcdefjhijklmnopqrstuvwsyz!@#$%^&{}+_=-*()<>:")==strlen(stu[i].StudentXh)) { printf("输入违规字符,重新输入\n"); scanf("%s", stu[i].StudentXh); } else {break; } } for (j = 0; j < i; j++) { if (strcmp(stu[i].StudentXh, stu[j].StudentName) == 0) { printf("该学号已经存在了,请重新输入\n"); h = 1; break; } } printf("请输入第%d个学生的姓名:\n", i + 1); scanf("%s", stu[i].StudentName); if(0==h) { i++; } } } while (i < n + m); n += m; printf("学生信息增加完毕!!!\n"); system("pause");//暂停窗口 } } //查询一共多少人 void QBxinxi()//全部信息 输出当前存储的全部信息 { int i; printf("共有%d位学生的信息:\n", n); if (0 != n) { printf("---------学生学号--------学生姓名------\n"); printf("---------------------------------------\n"); for (i = 0; i < n; i++) { printf("\t %s \t\t%s\n", stu[i].StudentXh, stu[i].StudentName); } } system("pause"); } //BXXHXM void BXXHXM()//排序姓名与 学号进行选择 { student tmp; char t[XMXH]; int i, j, k; char m; printf("\t---------------------------------------------------------\n"); printf("\t\t\t1 按照学号进行排序\n"); printf("\t\t\t2 按照姓名进行排序\n"); printf("\t\t\t3 退出排序模式\n"); printf("\t----------------------------------------------------------\n"); while (m < 0 || m >4) { while (getchar() != '\n'); printf("输入错误,请在1-3进行选择"); scanf("%d", &m); } while (1) { printf("请在1--3进行选择"); int m; scanf("%d", &m); switch (m) { for (i = 0; i < n - 1; i++) { for (j = n - 1; j > i; j--) if (strcmp(stu[j - 1].StudentXh, stu[j].StudentXh) > 0) { strcpy(t, stu[j - 1].StudentXh); strcpy(stu[j - 1].StudentXh, stu[j].StudentXh); strcpy(stu[j].StudentXh, stu[j].StudentName); strcpy(t, stu[j - 1].StudentName); strcpy(stu[j - 1].StudentName, stu[j].StudentName); strcpy(stu[j].StudentName, t); } } case 1: printf("\t------------------------------------------------------------------------------------\n"); printf("\t\t 学生学号--\t\t 学生姓名--\n"); for (i = 0; i < n ; i++) printf("\t\t\t % s\t\t\t % s\n", stu[i].StudentXh, stu[i].StudentName); m = 0; break; case 2: printf("\t-----------------------------------------------------------------------------------\n"); printf("\t\t 学生姓名--\t\t 学生学号--\n"); for (i = 0; i < n - 1; i++) { for (j = 0; j < n - 1 - i; j++) { if (strcmp(stu[j].StudentName, stu[j + 1].StudentName) > 0) { tmp = stu[j]; stu[j] = stu[j + 1]; stu[j + 1] = tmp; } } } for (i = 0; i < n; i++) printf("\t\t\t%s \t\t\t %s\n", stu[i].StudentName, stu[i].StudentXh); m = 0; case 3:return; } break; } } //说明 void help()//使用说明 { printf("\t---------------------------------------------\n"); printf(" 1.欢迎使用功能说明 \n"); printf(" 2.在使用之前请先使用功能1添加学生的信息 \n"); printf(" 3.然后在进行任意操作\n"); printf(" 4.祝您使用愉快\n"); printf("\t----------------------------------------------\n"); } //菜单 void menu() // 界面 { int num; printf(" \n\n "); printf(" 学生管理系统 \n"); printf("\t*************************************************************************************************\n"); printf(" 请输入您要选择的内容:\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("\t**********************************************************************************************\n"); printf("请选择菜单编号"); scanf("%s",&num); while (num<0||num>9) { while (getchar() != '\n'); printf("请输入1--7之间的数字:\n"); scanf("%d", &num); } switch (num) { case 1:insert(); break; case 2:del(); break; case 3:seek(); break; case 4:BXXHXM(); break; case 5:QBxinxi(); break; case 6:help(); break; case 7: k = 0; printf("即将退出程序!\n"); break; default: printf("请在0--8之间选择"); } }
优点
1 实现了对数据的处理,学号为英文时会报错。
实现的功能
1: 增加学生信息
2:删除学生信息
3:查找学生信息
4:学生信息排序
5:输出所有信息
6:使用说明
7: 退出