好久没用c语言写代码了,尝试着用渣渣水平写了写简易版学生信息管理系统……留个记录,继续前行吧,总要有个厚积薄发的过程的~
哎,失恋失恋了,谈恋爱哪有安安静静一步步成为一个大佬香……
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAXSIZE 1000
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef int Status;
typedef struct
{
char number[8];
char name[20];
char sex[5];
int age[5];
char aclass[20];
double score;
}student;
typedef student ElemType;
typedef struct
{
ElemType *elem;
int length;
}sqlist;
void input(ElemType *e)
{
printf("学号:");
scanf("%s",e->number);
printf("姓名:");
scanf("%s",e->name);
printf("性别:");
scanf("%s",e->sex);
printf("年龄:");
scanf("%d",e->age);
printf("班级:");
scanf("%s",e->aclass);
printf("成绩:");
scanf("%lf",&e->score);
}
void output(ElemType *e)
{
printf("学号:%s, 姓名:%s, 性别:%s, 年龄:%d, 班级:%s, 成绩:%.2lf\n\n",e->number,e->name,e->sex,e->age,e->aclass,e->score);
}
Status InitList(sqlist *L) //初始化,创建空顺序表
{
L->elem=new ElemType[MAXSIZE];
if(!L->elem) exit(OVERFLOW); //存储分配失败退出
L->length=0;
return OK;
}
int LocateElem(sqlist *L,ElemType e) //查询模块
{
int i;
for(i=0;i<L->length;i++)
if(!strcmp(L->elem[i].name,e.name))
{
return i+1;
}
return 0;
}
Status ListInsert(sqlist *L,int i,ElemType e) //插入模块
{
int j;
if((i<1)||(i>L->length+1)) return ERROR; //当输入位置数值不符合要求时返回ERROR
if(L->length==MAXSIZE) return ERROR; //判断是否溢出
for(j=L->length-1;j>=i-1;j--)
L->elem[j+1]=L->elem[j];
L->elem[i-1]=e;
++L->length;
return OK;
}
Status ListDelete1(sqlist *L,ElemType e) //根据姓名删除信息模块
{
int i,j,s;
int o=0;
for(i=0;i<L->length;i++)
if(o!=L->length) //判断L中是否存在该学生
if(!strcmp(L->elem[i].name,e.name)) //搜索匹配
{
s=i+1;
o++;
}
else return ERROR;
for(j=s;j<L->length;j++) //找到位置后将后位信息往前移
L->elem[j-1]=L->elem[j];
--L->length;
return OK;
}
Status ListDelete2(sqlist *L,int i) //根据位置删除信息模块
{
int j;
if((i<1)||(i>L->length)) return ERROR; //判断输入数值是否符合位置要求
for(j=i;j<L->length;j++)
L->elem[j-1]=L->elem[j]; //匹配到相应信息后将后位往前移
--L->length;
return OK;
}
int main()
{
int select,person,i,n,result,a,b;
ElemType e,m;
sqlist L;
char f[20];
printf("======欢迎您进入学生信息管理系统的世界~======\n");
printf("1.初始化顺序表~\n");
printf("2.输入学生信息~\n");
printf("3.输出所有学生信息~\n");
printf("4.输出指定姓名学生信息~\n");
printf("5.输出指定位置学生信息~\n");
printf("6.插入学生信息~\n");
printf("7.删除指定姓名学生信息~\n");
printf("8.删除指定位置学生信息~\n");
printf("9.统计学生信息总数~\n");
printf("0.退出学生信息系统~\n");
printf("================欢迎下次光临~================\n");
select=10;
while(select!=0)
{
printf("请选择您即将使用的管理功能:\n");
scanf("%d",&select);
switch(select)
{
case 1: //初始化模块
printf("正在初始化顺序表……\n");
if(InitList(&L))
printf("初始化顺序表成功~\n");
else
printf("初始顺序表失败~\n");
break;
case 2: //输入信息模块
printf("正在登记学生信息……\n");
printf("请问即将输入学生信息人数是多少呢:");
scanf("%d",&person);
for(i=0;i<person;i++)
{
printf("第%d名学生:\n",i+1);
input(&L.elem[i]);
}
L.length=person;
break;
case 3: //输出信息模块
printf("正在输出所有学生信息……\n");
for(i=0;i<L.length;i++)
{
output(&L.elem[i]);
}
break;
case 4: //输出指定学生信息模块
printf("正在输出指定姓名学生信息……\n");
printf("请输入指定学生姓名:\n");
scanf("%s",e.name);
result=LocateElem(&L,e);
if(result!=0)
output(&L.elem[result-1]);
else
printf("啊哦?这位同学没有出现在系统中哦~\n");
break;
case 5: //输出指定位置学生信息模块
printf("正在输出指定位置学生信息……\n");
printf("请输入指定学生位置:\n");
scanf("%d",&a);
output(&L.elem[a-1]);
break;
case 6: //在指定位置插入学生信息模块
printf("正在插入学生信息……\n");
printf("请输入学生信息插入位置:\n");
scanf("%d",&n);
printf("请输入即将插入的学生信息:\n");
printf("学号:");
scanf("%s",m.number);
printf("姓名:");
scanf("%s",m.name);
printf("性别:");
scanf("%s",m.sex);
printf("年龄:");
scanf("%d",m.age);
printf("班级:");
scanf("%s",m.aclass);
printf("成绩:");
scanf("%lf",&m.score);
if(ListInsert(&L,n,m))
printf("操作成功~\n");
else
printf("操作失败……\n");
break;
case 7: //删除指定姓名学生信息模块
printf("请输入所要删除学生信息的学生姓名:\n");
scanf("%s",e.name);
if(ListDelete1(&L,e))
printf("您已成功删除%s同学的信息~\n",e.name);
else
printf("呜呜呜,删除失败了呢……\n");
break;
case 8: //删除指定位置学生信息模块
printf("请输入所要删除学生信息位置:\n");
scanf("%d",&b);
if(ListDelete2(&L,b))
printf("您已成功删除第%d位同学的信息~\n",b);
else
printf("呜呜呜,删除失败了呢……\n");
break;
case 9: //统计信息表现有学生人数模块
printf("学生信息表总人数为:%d\n",L.length);
break;
case 0: //退出学生信息管理系统
exit(0);
}
}
}