
#include <stdio.h> |
#include <windows.h> |
#define SYSTEM_English_TITLE "student_manage_system" |
#define SYSTEM_Chinese_TITLE "SMS管理系统" |
#define SYSTEM_VERSION "1.0.1" |
#define students_data_capacity 150 //存储学生信息的数组容量 |
// 函数申明 |
void Input_Student_Data(); // 实现添加学生信息 |
void Print_Student_Data(int *students_code); // 实现显示学生信息 |
void Modify_Student_Data(int *students_code); //修改学生信息 |
void Delete_Student_Data(int *students_code, int *students_capacity); //删除学生信息 |
// 学生信息结构体 |
typedef struct{ |
char student_ID[128]; // 学生学号 |
char student_name[64]; // 学生姓名 |
char student_gender[30]; // 学生性别 |
int student_age[10]; // 学生年龄 |
char student_addr[128]; // 学生地址 |
char student_phone_number[128]; // 学生电话号码 |
char student_E_maill[128]; // 学生电子邮箱 |
} Student_Data; |
// 采用结构体数组的形式存储学生的信息 |
Student_Data students_data[students_data_capacity]; |
int Student_Data_Number = 1; // 添加的学生个数存储号码 |
//添加学生信息函数 |
void Input_Student_Data(){ |
int return_scanf_new_insert_student_data_student_age; |
Student_Data new_insert_student_data; |
printf("请输入学生的学号:"); scanf("%s",new_insert_student_data.student_ID); |
printf("请输入学生的姓名:"); scanf("%s",new_insert_student_data.student_name); |
printf("请输入学生的性别:"); scanf("%s",new_insert_student_data.student_gender); |
while(1){ |
printf("请输入学生的年龄:"); |
return_scanf_new_insert_student_data_student_age = scanf("%d",&(new_insert_student_data.student_age)); |
if (return_scanf_new_insert_student_data_student_age == 0){ |
printf("[-]年龄必需为数字!\n"); |
while(getchar() != '\n'); //清空上一个缓冲区 |
}else{ |
break; |
} |
} |
printf("请输入学生的地址:"); scanf("%s",new_insert_student_data.student_addr); |
printf("请输入学生的电话:"); scanf("%s",new_insert_student_data.student_phone_number); |
printf("请输入学生的邮箱:"); scanf("%s",new_insert_student_data.student_E_maill); |
students_data[Student_Data_Number] = new_insert_student_data; |
printf("[*]数据录入成功!\n\n"); |
Student_Data_Number++; // 将数组指向下一个空间存储下一个学生的信息 |
|
} |
//显示学生信息函数 |
void Print_Student_Data(int *students_code){ |
printf("*********************\n"); |
printf("当前代码:%d\n",*students_code); |
printf("[+]学号:%s\n",students_data[*students_code].student_ID); |
printf("[+]姓名:%s\n",students_data[*students_code].student_name); |
printf("[+]性别:%s\n",students_data[*students_code].student_gender); |
printf("[+]年龄:%d\n",*(students_data[*students_code].student_age)); |
printf("[+]地址:%s\n",students_data[*students_code].student_addr); |
printf("[+]电话:%s\n",students_data[*students_code].student_phone_number); |
printf("[+]邮箱:%s\n",students_data[*students_code].student_E_maill); |
printf("*********************\n"); |
} |
//修改学生信息函数 |
void Modify_Student_Data(int *students_code){ |
printf("请修改学生的学号:"); scanf("%s",students_data[*students_code].student_ID); |
printf("请修改学生的姓名:"); scanf("%s",students_data[*students_code].student_name); |
printf("请修改学生的性别:"); scanf("%s",students_data[*students_code].student_gender); |
while (1){ |
printf("请修改学生的年龄:"); int return_scanf_students_data_students_code_students_age = scanf("%d",students_data[*students_code].student_age); |
if (return_scanf_students_data_students_code_students_age == 0){ |
printf("[-]修改的年龄必须要为整数!\n"); |
while(getchar() != '\n'); |
} |
else{ |
break; |
} |
} |
printf("请修改学生的地址:"); scanf("%s",students_data[*students_code].student_addr); |
printf("请修改学生的电话:"); scanf("%s",students_data[*students_code].student_phone_number); |
printf("请修改学生的邮箱:"); scanf("%s",students_data[*students_code].student_E_maill); |
printf("[*]学生数据已修改成功\n!"); |
} |
//删除学生信息函数 【采用独家删除指定元素数组算法】 |
void Delete_Student_Data(int *students_code, int *students_capacity){ |
printf("删除第%d号学生信息...\n",*students_code); |
int find_code = 0; // 是否找到该学生的的判断代码 |
// 定义搜寻该学生 |
for (int i = 0; i <= *(students_code) ; i++){ |
if (i == *(students_code) && i <= *(students_capacity)){ |
printf("成功找到数组!删除数据如下:\n"); |
printf("学号:%s\n",students_data[i].student_ID); |
printf("姓名:%s\n",students_data[i].student_name); |
printf("性别:%s\n",students_data[i].student_gender); |
printf("年龄:%d\n",*(students_data[i].student_age)); |
printf("地址:%s\n",students_data[i].student_addr); |
printf("电话:%s\n",students_data[i].student_phone_number); |
printf("邮箱:%s\n",students_data[i].student_E_maill); |
find_code = 1; // 标记已经找到该学生 |
//修改操作 |
for (int j = i; j <= *(students_capacity)-1; j++){ |
students_data[j] = students_data[j+1]; |
} |
break; |
} |
else{ |
printf("[+]搜索中:%d...\n",i); |
Sleep(50); |
} |
} |
if (find_code){ |
Student_Data_Number--; |
printf("[+]删除成功!已将所有的学生班级代号向前移动一个位置\n"); |
} |
else { |
printf("号码越界,未找到该学生!【注意:该系统容量为:%d】\n",students_data_capacity); |
} |
|
} |
int main(){ |
printf("系统名称:%s\t%s\n",SYSTEM_Chinese_TITLE,SYSTEM_English_TITLE); |
printf("=====================================================\n"); |
printf("当前管理系统版本:v%s\n",SYSTEM_VERSION); |
printf("-------------------------------\n"); |
printf("系统功能序列:\n"); |
printf("1.录入数据\n"); |
printf("2.显示数据\n"); |
printf("3.修改数据\n"); |
printf("4.删除数据\n"); |
printf("5.退出系统\n"); |
printf("=====================================================\n"); |
|
while (1) |
{ |
int select_code; // 功能选择代码 |
int student_code_1; // 学生查找代码 |
int student_code_2; // 学生修改代码 |
int student_code_3; // 学生删除代码 |
int return_scanf_select_code; // 判断用户选择的功能是否为数字所返回的值,只要返回了0则代表用户输入的功能数据类型不正确 |
while(1){ |
printf("请输入功能序列号:"); |
return_scanf_select_code = scanf("%d",&select_code); //scanf 函数的读取输入后,输入缓冲区可能残留字符 |
if (return_scanf_select_code == 0){ |
printf("[-]请输入整数的功能序列号!\n"); |
while(getchar() != '\n'); //使用getchar()来读取上一个缓冲区的字符直到读取到'\n'为止,目的就是清空缓冲区 |
} |
else{ |
break; |
} |
} |
switch (select_code){ |
case 1: |
printf("\n当前选择:【录入数据】\n"); |
int capacity_students_data = sizeof(students_data) / sizeof(students_data[0]); |
printf("------当前系统存储的学生容量:%d个【第0号位置已占用一个空间】实际系统容量:%d个------\n",capacity_students_data+1,capacity_students_data); |
Input_Student_Data(); |
break; |
case 2: |
printf("\n当前选择:【显示数据】\n"); |
printf("------当前系统存储的学生个数:%d个【包括一个[00]空数据】------\n",Student_Data_Number); |
while (1){ |
printf("请输入你要查看的学生班级代号:"); scanf("%d",&student_code_1); |
if (student_code_1 > students_data_capacity+1){ |
printf("[-]系统检测到该数据存储中暂未有该序号的学生信息,请输入%d以内的学生代码,请重新查询!\n",(students_data_capacity+1)); |
while(getchar() != '\n'); |
} |
else{ |
break; |
} |
} |
Print_Student_Data(&student_code_1); |
break; |
case 3: |
printf("\n当前选择:【修改数据】\n"); |
printf("------当前系统存储的学生个数:%d个【包括一个[00]空数据】------\n",Student_Data_Number); |
while (1){ |
printf("请输入你要修改的学生班级代号:"); int return_scanf_student_code_2 = scanf("%d",&student_code_2); |
if (student_code_2 > students_data_capacity+1 || return_scanf_student_code_2 == 0){ |
printf("[-]系统检测到该数据存储中暂未有该序号的学生信息,请输入%d以内的学生代码,请重新选择!\n",(students_data_capacity+1)); |
while(getchar() != '\n'); |
} |
else{ |
break; |
} |
} |
Modify_Student_Data(&student_code_2); |
break; |
case 4: // bug修改:对scanf进行检查 |
printf("\n当前选择:【删除数据】\n"); |
int student_capacity = sizeof(students_data) / sizeof(students_data[0]); |
printf("------当前系统存储的学生个数:%d个【包括一个[00]空数据】------\n",Student_Data_Number); |
|
/*存在bug*/ |
while (1){ |
printf("请输入你要删除的学生班级代号:"); int return_scanf_student_code_3 = scanf("%d",&student_code_3); |
if(return_scanf_student_code_3 == 0){ |
printf("[-]请输入有效的数字代号!\n"); |
while(getchar() != '\n'); |
} |
else{ |
break; |
} |
} |
Delete_Student_Data(&student_code_3,&student_capacity); |
break; |
case 5: |
printf("\n\n------系统正在退出,欢迎下次访问SMS管理系统!------\n"); |
Sleep(3000); |
exit(0); |
default: |
printf("[-]输入错误!请重新输入!\n"); |
break; |
} |
} |
return 0; |
} |



