#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; |
} |