c语言版学生管理系统 c语言简单学生管理系统
程序员文章站
2022-05-31 12:23:11
...
练练手,一个简单得不能再简单的学生管理系统。
#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; } //如果信息库不为空,说明该学生已经存在,直接返回NO printf(" **添加失败** \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; } //否则说明该学生不存在,返回NO printf(" **删除失败** \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; } //否则说明该学生不存在,返回NO printf(" **查询失败** \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; }
上一篇: hadoop单点运行方式
下一篇: hadoop单点安装以及配置【附件】