C入门之简单的学生管理系统

来源:互联网 发布:国家一级美术师数据库' 编辑:程序博客网 时间:2024/05/17 04:57

        练练手,一个简单得不能再简单的学生管理系统。望高手们勿喷。尴尬

#include <stdio.h>#include <stdlib.h>#include <string.h>#define NUM 20 //总人数#define ADD 1//添加的标签#define DEL 2//删除的标签#define UPD 3//更新的标签#define SER 4//单个搜索的标签#define ALL 5//全部搜索的标签#define EXIT 6//退出的标签#define YES 1//操作成功#define NO 0//操作失败//学生成绩结构体struct info{float chinese;float math;float english;};//学生基本信息结构体,嵌套学生成绩结构体struct stu{int id;char *name;char sex;struct info *in;};typedef struct stu stu_s;typedef struct info info_i;//学生信息库用全局变量stu_s *lib[NUM]; int len = sizeof(lib) /sizeof(lib[0]);int add(stu_s *t)//添加学生函数,我用(id - 1)来表示在学生信息库中的位置,省去遍历的麻烦{if( lib[(t->id)-1] == NULL)//如果信息库为空的时候,直接添加,返回YES{lib[t->id - 1] = (stu_s *)malloc(sizeof(struct stu) * 1);lib[t->id - 1]->name = (char *) malloc(sizeof(char) * 10);lib[t->id - 1]->in = (info_i *) malloc(sizeof(struct info) * 1);lib[t->id - 1]->id = t->id;lib[t->id - 1]->name = t->name;lib[t->id - 1]->sex = t->sex;lib[t->id - 1]->in->chinese = t->in->chinese;lib[t->id - 1]->in->math = t->in->math;lib[t->id - 1]->in->english = t->in->english;return YES;}//如果信息库不为空,说明该学生已经存在,直接返回NOprintf("                   **添加失败**          \n");printf("         ^^^^^对不起!该学生已存在!^^^^^\n");return NO;}int delete(int id)//删除学生,通过传入的id{if(lib[id - 1] != NULL)//如果该学生信息不为空,直接删除,返回YES{free (lib[id - 1]);lib[id - 1] = NULL;//memmove(lib + j, lib + j + 1,len - j);return YES;}//否则说明该学生不存在,返回NOprintf("                   **删除失败**          \n");printf("         ^^^^^对不起,该学生不存在!^^^^^\n");return NO;}int beforeupd(int id)//更新学生信息之前,先确定一下该学生是否存在,再进行下一步操作,存在返回YES{if(lib[id - 1] == NULL){printf("                   **更新失败**          \n");printf("         ^^^^^对不起!该学生不存在!^^^^^\n");return NO;}return YES;}int update(int id,stu_s *t)//前面已经确定学生存在,就直接更新学生信息,返回YES{lib[id - 1]->id = t->id;lib[id - 1]->name = t->name;lib[id - 1]->sex = t->sex;lib[id - 1]->in->chinese = t->in->chinese;lib[id - 1]->in->math = t->in->math;lib[id - 1]->in->english = t->in->english;return YES;}int search(int id)//单个学生信息搜索{if(lib[id - 1] != NULL)//如果该学生信息不为空,直接打印,返回YES{printf("id = %d的学生信息如下:\n",id);printf("学号:%d, 姓名:%s, 性别:%c, 语文:%.2f, 数学:%.2f, 英语:%.2f\n",lib[id - 1]->id,lib[id - 1]->name,lib[id - 1]->sex,lib[id - 1]->in->chinese,lib[id - 1]->in->math,lib[id - 1]->in->english);return YES;}//否则说明该学生不存在,返回NOprintf("                   **查询失败**          \n");printf("         ^^^^^对不起!该学生不存在!^^^^^\n");return NO;} void printall()//全部学生信息查询{int j;for(j = 0; j < len; ++j) //这里需要遍历一下{if(lib[j] != NULL)//把不为空的所有信息直接打印出来{printf("学号:%d, 姓名:%s, 性别:%c, 语文:%.2f, 数学:%.2f, 英语:%.2f\n",lib[j]->id,lib[j]->name,lib[j]->sex,lib[j]->in->chinese,lib[j]->in->math,lib[j]->in->english);}}}int menu()//菜单函数,{printf("@请选择一个菜单标签:\n");printf("1:添加学生信息。\n");printf("2:删除学生信息。\n");printf("3:更新学生信息。\n");printf("4:查询单个学生信息。\n");printf("5:查询全部学生信息。\n");printf("6:退出系统。\n");printf("=======================================================\n");int num;scanf("%d",&num);getchar();return num;}int main(void){//声明一个学生信息构造体,并分配动态内存stu_s *s;s = (stu_s *)malloc(sizeof(struct stu) * 1);s->name = (char *) malloc(sizeof(char) * 10);s->in = (info_i *) malloc(sizeof(struct info) * 1);printf("===================*学生管理系统*======================\n");int num;//设置一个菜单标签,以便循环操作Label:num = menu();switch(num)//捕获用户输入的菜单标签{case ADD://添加标签printf("请输入学号:");scanf("%d",&s->id);getchar();printf("请输入姓名:");s->name = (char *) malloc(sizeof(char) * 10);scanf("%s",s->name);getchar();printf("请输入性别:");scanf("%c",&s->sex);getchar();printf("请输入语文成绩:");scanf("%f",&s->in->chinese);getchar();printf("请输入数学成绩:");scanf("%f",&s->in->math);getchar();printf("请输入英语成绩:");scanf("%f",&s->in->english);getchar();if(s->id > 0 && s-> id <= NUM){int isadd = add(s);if(isadd == YES)printf("       *****恭喜您,添加学生信息成功!******\n");}else{printf("      *****对不起,您输入的id超出范围!*****\n");}printf("=======================================================\n");goto Label;case DEL://删除标签printf("请输入要删除的学生的id:");int idD;scanf("%d",&idD);getchar();if(idD > 0 && idD <= NUM){int isdel = delete(idD);if(isdel == YES){printf("        *****恭喜您,删除学生信息成功!*****\n");}}else{printf("      *****对不起,您输入的id超出范围!*****\n");}printf("=======================================================\n");goto Label;case UPD://更新标签printf("请输入要更新的学生id:");int idU;scanf("%d",&idU);getchar();if(idU > 0 && idU <= NUM){int isok = beforeupd(idU);if(isok == YES){s->id = idU;printf("请输入姓名:");s->name = (char *) malloc(sizeof(char) * 10);scanf("%s",s->name);getchar();printf("请输入性别:");scanf("%c",&s->sex);getchar();printf("请输入语文成绩:");scanf("%f",&s->in->chinese);getchar();printf("请输入数学成绩:");scanf("%f",&s->in->math);getchar();printf("请输入英语成绩:");scanf("%f",&s->in->english);getchar();int isupd = update(idU,s);if(isupd == YES)printf("      *****恭喜您,更新学生信息成功!******\n");}}else{printf("      *****对不起,您输入的id超出范围!*****\n");}printf("=======================================================\n");goto Label;case SER:printf("请输入要查询的学生id:");int idS;scanf("%d",&idS);if(idS > 0 && idS < NUM){int isser = search(idS);}else{ printf("      *****对不起,您输入的id超出范围!*****\n");}printf("=======================================================\n");goto Label;case ALL:printf("所有学生信息如下:\n");printall();printf("=======================================================\n");goto Label;goto Label;case EXIT:break;}return 0;}


原创粉丝点击