练练手,一个简单得不能再简单的学生管理系统。望高手们勿喷。
#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;
}
分享到:
相关推荐
C语言入门小项目,学生个人管理系统。涉及到了一些结构体,字符串以及通用的循环语句练习。
c语言入门级菜鸟制作,供更多的菜鸟交流之用。
用链表和C语言在Linux下实现简单学生管理系统
这是我边学C边写的一个学生管理系统,也属于入门级的吧!
学生管理系统源码.rar
一个C语言的入门实战项目,简易学生成绩管理系统。分为学生用户和管理员用户分别登录;学生端可查看自身成绩,实现成绩简易分析,并包含成绩PK的趣味功能、个人称号的趣味功能;管理员端可查看学生成绩列表,并可...
基于EasyX和C语言的可视化学生成绩管理系统源码带详细注释.zip基于EasyX和C语言的可视化学生成绩管理系统源码带详细注释.zip基于EasyX和C语言的可视化学生成绩管理系统源码带详细注释.zip基于EasyX和C语言的可视化...
使用人群:学生、C语言入门 使用场景及目标:本人编写,仅供参考 2.需求功能 (1)VS程序 (2)c语言编写 (3)具体内容: 1)利用结构体存储学生的基本信息,包括学号,姓名,年龄,住址,成绩1,成绩2。 2)提供...
C语言入门程序,用来管理学生管理系统,主要用到C语言的结构体,指针,熟悉一个C语言项目的开发流程。 更新说明 增加了班级管理系统,能够根据班级的最大容量来添加学生,添加了删除功能,排序功能。增加了大小排序...
参考了一些网上的代码,用自己的语言组织了起来提交到学校,这里分享给大家刚刚入门的伙计们参考参考
学生管理系统,C语言课题设计,C语言入门级代码
第22题学生基本信息管理(难度系数:5级)——C语言编程模拟实现一个学生基本信息管理系统。 本来想淘宝买,要价400还不如自己写一个。还没看着免费发布的,可能是别人写的质量比较高。我的这个系统里边还有些问题,...
使用C语言开发的学生成绩管理系统源码,适合刚入门学习C语言编程的爱好者。
C语言的大作业,写的很简单,课程设计顺利通过,黑框控制台程序
该系统是学习C语言的一个入门程序,包括了学生信息的录入、查询、搜索、修改等等,以及系统的设置等功能,对于刚学习C语言的人来说,是个不错的选择……
菜鸟入门--学生考试管理系统
课设新项目-基于C语言实现学生成绩管理系统源码(含课设报告).zip课设新项目-基于C语言实现学生成绩管理系统源码(含课设报告).zip课设新项目-基于C语言实现学生成绩管理系统源码(含课设报告).zip课设新项目-基于C语言...
c语言写的学生信息管理系统。 可作为c语言入门的学习代码。 亦可作为课程设计。 代码功能完整。 控制台程序。
不是很完善的学生成绩管理系统,VS2017以上版本,用C语言实现,包含文件的读写功能,足以应付大学C语言课设,欢迎小白下载学习,大佬轻喷。
用纯C语言实现的一些项目,C语言入门级的实战程序。学生信息管理系统、俄罗斯方块游戏.zip