score.h文件
#ifndef __SCORE_H__
#define __SCORE_H__
#define MAX_STU 50
#define pri_debug(msg) do {
printf("%s : %s : %d : %sn", __FILE__,__func__,__LINE__,msg);
}while(0)
// 声明一个学生的结构体类型
typedef struct{
char name[20]; //名字
char sex; //性别
int score; //学习成绩
}Stu_t;
// 声明一个班级的结构体类型
typedef struct {
Stu_t stu_s[MAX_STU]; // 一个班级最大有50个人
int count; // 当前班级的人数
}class_t;
typedef enum{
INSERT = 1,
DELETE,
UPDATE,
QUIRE,
PRINT_ALL,
SORT,
QUIT,
}manager_cmd_t;
int insert_student(class_t *cls);
int delete_student(class_t *cls);
int update_student(class_t *cls);
int inquire_student(class_t *cls);
void print_all_student(class_t *cls);
void sort_student(class_t *cls);
void quit_student_manager_system();
#endif
score.c
#include "score.h" #include//打印学员信息的函数 void print_student(Stu_t *stu) { printf("姓名:%s 性别:%c 成绩:%dn", stu->name, stu->sex, stu->score); } //插入学员信息的函数 int insert_student(class_t *cls) { int i, loop = 1, chose, exist = 0;// exist 0学生存在 1学生存在 Stu_t stu; //定义一个结构体变量 while (loop) { again: exist = 0; puts("********插入学员********"); puts("**** 1.插入 2. 退出 ****"); puts("************************"); printf("请输入您的选择>"); scanf("%d", &chose); while ((getchar() != 'n')) ; //吃掉垃圾字符 if (chose < 1 || chose > 2) { printf("输入有误,请重新输入n"); goto again; } switch (chose) { case 1: //输入学员信息 打印学员信息 判断输入是否正确 printf("请输入插入学员的信息(name sex(w or m) scire)> "); scanf("%s %c %d", stu.name, &stu.sex, &stu.score); print_student(&stu); //判断性别输入是否正确 if ((stu.sex != 'w') && (stu.sex != 'm')) { printf("输入性别有误,请重新输入n"); break; } //判断成绩是否输入正确 if ((stu.score > 100) || (stu.score < 0)) { printf("输入成绩有误,请重新输入n"); break; } //判断要插入的学员信息是否已经存在 for (i = 0; i < cls->count; i++) { if (!strcmp(stu.name, cls->stu_s[i].name)) { printf("学员已存在n"); exist = 1; break; } } if (exist == 0) { cls->stu_s[cls->count + 1] = stu; cls->count++; } break; case 2: loop = 0; break; } } return 0; } //删除学员信息的函数 int delete_student(class_t *cls) { int i, j, loop = 1, chose; char name[20] = {0}; while (loop) { again: puts("********删除学员********"); puts("**** 1.删除 2. 退出 ****"); puts("************************"); printf("请输入您的选择(1 or 2)>"); scanf("%d", &chose); while ((getchar() != 'n')); //吃掉垃圾字符 if (chose < 1 || chose > 2){ printf("输入选择有误,请重新输入n"); goto again; } switch (chose){ //输入学员名字 case 1: //输入学员名字 printf("请输入删除学员的姓名(name)>"); scanf("%s", name); //拿输入学生的名字与班级学生的名字作比较 如果相等说明学员存在 //拿输入学生的名字与班级学生的名字作比较 如果相等 //如果不相等就让输入的学生的名字和下一个班级内部的学生的名字作比较, //如果比完还不相等说明 班级里没有这个学生 for(i=0;i<=cls->count;i++){ if (!strcmp(name, cls->stu_s[i].name)){ for (j = 0; j < cls->count-i; j++){ cls->stu_s[i + j] = cls->stu_s[i + j + 1]; //覆盖操作 间接删除 } cls->count--; break; }else{ printf("班级里没有这个学员n"); } } break; case 2: loop = 0; break; } } return 0; } //修改学员信息的函数 int update_student(class_t *cls) { int i, loop = 1, chose; int score; char name[20] = {0}; while (loop) { NEXT: puts("********修改成绩********"); puts("**** 1.修改 2. 退出 ****"); puts("************************"); printf("请输入您的选择(1 or 2)>"); scanf("%d", &chose); while ((getchar() != 'n')) ; if (chose < 1 || chose > 2) { printf("输入有误,请重新输入n"); goto NEXT; } switch (chose) { case 1: //通过学员姓名 找到学员位置 printf("请输入学员的姓名name>"); scanf("%s", name); while ((getchar() != 'n')); for (i = 0; i <= cls->count; i++) { if (!strcmp(name, cls->stu_s[i].name)) { //修改学员成绩 printf("请输入修改后学员的成绩n"); scanf("%d", &score); while ((getchar() != 'n')); cls->stu_s[i].score = score; break; }else{ printf("班级里没有这个学员n"); } } break; case 2: loop = 0; break; } } return 0; } int inquire_student(class_t *cls) { int i, loop = 1, chose; char name[20] = {0}; while (loop){ again: puts("********查询学员*********"); puts("**** 1.查询 2. 退出 ****"); puts("************************"); printf("please input your choose (1 or 2) > "); scanf("%d", &chose); if (chose > 2 || chose < 1) { pri_debug("输入选择错误!n"); goto again; } switch(chose){ case 1: printf("请输入查询学生的姓名(name) > "); scanf("%s", name); for(i = 0; i <= cls->count; i++) { if (!strcmp(name, cls->stu_s[i].name)) { print_student(&cls->stu_s[i]); break; } else { printf("班级没有这个学员!n"); } } break; case 2: loop = 0; break; } } return 0; } //遍历学员管理系统的函数 void print_all_student(class_t *cls) { int i = 0; for (i = 0; i <= cls->count; i++) { print_student(&cls->stu_s[i]); } } //按学员成绩对学生进行升序or降序排序 void sort_student(class_t *cls) { int i, j, flag, chose; Stu_t temp; again: puts("*******按成绩排序*******"); puts("**** 1.升序 2.降序 ****"); puts("************************"); printf("请输入您的选择(1 or 2)>"); scanf("%d", &chose); //while ((getchar() != 'n')); //吃掉垃圾字符 if (chose < 1 || chose > 2){ printf("输入有误,请重新输入n"); goto again; } switch (chose){ case 1: // 按照学生成绩进行升序排序 for (flag = 1, i = 0; i < cls->count; i++){ for (j = 0; j < cls->count - i; j++){ if (cls->stu_s[j].score > cls->stu_s[j+1].score){ temp = cls->stu_s[j]; cls->stu_s[j] = cls->stu_s[j + 1]; cls->stu_s[j + 1] = temp; flag = 0; } } if (flag = 0) break; } print_all_student(cls); //排序完遍历 break; case 2: // 按照学生成绩进行降序排序 for (flag = 1, i = 0; i < cls->count; i++){ for (j = 0; j < cls->count - i; j++){ if (cls->stu_s[j].score < cls->stu_s[j+1].score){ temp = cls->stu_s[j]; cls->stu_s[j] = cls->stu_s[j + 1]; cls->stu_s[j + 1] = temp; flag = 0; } } if (flag = 0) break; } print_all_student(cls); //排序完遍历 break; } } void quit_student_manager_system(){ printf("退出学生管理系统...n"); }
main.c
#include "score.h" #includeint main(int argc, const char *argv[]) { // 编写一个学生管理系统的界面 int chose;// 输入选择的变量 int loop = 1; class_t *cls = (class_t*)malloc(sizeof(class_t)) ;// 定义一个新的班级变量 if(cls == NULL){ printf("分配空间失败,请重新分配n"); return -1; } cls->count = -1; // 数组的元素从0开始 while(loop) { again: puts("####################学生成绩管理系统####################n"); puts("####1.插入 2.删除 3.修改 4.查询 5.遍历 6.排序 7.退出####n"); puts("####################学生成绩管理系统####################n"); printf("请输入您的选择>"); scanf("%d",&chose); while((getchar() != 'n')); // 吃掉所有的垃圾字符 if(chose<1 || chose>7){ printf("输入有误,请重新输入n"); goto again; } switch (chose){ case INSERT: insert_student(cls); break; case DELETE: delete_student(cls); break; case UPDATE: update_student(cls); break; case QUIRE: inquire_student(cls); break; case PRINT_ALL: print_all_student(cls); break; case SORT: sort_student(cls); break; case QUIT: quit_student_manager_system(); loop=0; break; default: printf("输入有误,请重新输入!!!n"); break; } } if(cls != NULL){ free(cls); cls = NULL; } return 0; }



