简易学生管理系统设计

要求:选择一种数据结构实现对每个学生信息的存储,并实现如下功能

* 插入一个学生信息
* 删除一个学生信息
* 修改学生信息
* 查找学生信息
实现时要求做一个简单的界面,能让程序反复的执行不同功能。

采用线性表的顺序存储结构

主界面:

 选择1,插入学生信息,继续插入输入y,结束插入输入n,填写插入位置

输入6返回主菜单,输入5显示学生信息

输入2删除学生信息界面,输入2将删除第二个同学信息 

 

 输入6返回主菜单,输入3修改学生信息

主菜单输入4查找学生信息

 

 代码
#include<iostream> #include<malloc.h> //动态存储申请头文件 #include<string.h> using
namespace std; typedef int ELemType; typedef int Status; #define ListInitSize
20 #define ListIncrement 20 #define ERROR 0 #define OK 1 #define over -1
typedef struct{ char number[15]; //学号 char name[20]; //姓名 char gender; //性别
char major[20]; //专业 char telephone[12]; //联系方式 }Student;//类型为学生 typedef
struct{ Student *elem; //存储空间的基址 Status length; //当前长度 Status listsize;
//当前分配的存储容量(以sizeof(Student)为单位) }Sqlist; //信息初始化,构造一个空的线性表 Status
InitList(Sqlist &l){ l.elem=(Student *)malloc(ListInitSize*sizeof(Student));
//ListInitSize宏定义20 申请ListInitSize个大小为整型(Student)字节的空间,把空间指针给L.elem // 或者l.elem
= new Student[ListInitSize]; if(!l.elem) exit(over);
//判断l中的数据成员elem是否为0,为0即执行if下面语句 l.length=0; //赋值 l.listsize=ListInitSize;
return OK; } //插入学生信息 Status ListInsert(Sqlist &l,Status i,Student s){ Student
*newbase; if(i<1||i>l.length+1) return ERROR; //i值不合法 if(l.length>=l.listsize)
//当前存储空间已经满了,增加分配空间 { newbase=(Student*)realloc(l.elem,(
ListInitSize+ListIncrement)*(sizeof(Student))); /*动态内存调整函数
指针名=(数据类型*)reaLLoc(要改变内存大小的指针名,新的大小) 小于原来时可能会丢失 先释放原来L.elem所指内存区域,并按照
(LIST_INIT_SIZE+ListIncrement)*sizeof(Student) 的大小重新分配空间,其中ListIncrement宏定义为20,
同时将原有数据从头到尾拷贝到新分配的内存区域, 并返回该内存区域的首地址。即重新分配存储器块。 */ if(!newbase) exit(over); //
判断newbase是否为0,为0即执行if下面语句 l.elem=newbase; //赋值 l.listsize+=ListIncrement; }
for(Status j=l.length;j>=i;j--) l.elem[j]=l.elem[j-1]; //赋值 l.elem[i-1]=s;
l.length++; return OK; } //显示信息 void print(Sqlist &l){ if(l.length==0)
printf("空表,无任何记录!\n\n"); printf("学号 姓名 性别 专业 联系方式 \n");
printf("**************************************************************\n");
for(Status i=0;i<l.length;i++){ printf("%-10s
%-8s",l.elem[i].number,l.elem[i].name); //输出学号 姓名 if(l.elem[i].gender=='m')
printf("\t 男 \t"); //判断语句 else printf("\t 女 \t"); printf("%10s
%14s",l.elem[i].major,l.elem[i].telephone); //输出专业 联系方式 printf("\n"); }
printf("-----------------------------------------\n"); } //显示指定学生信息 void
print_single(Student s){ printf("学号 姓名 性别 专业 手机号 联系方式 \n");
printf("************************************************\n"); printf("%-10s
%-8s",s.number,s.name); //输出学号 姓名 if(s.gender=='m') printf("男"); else
printf("女"); printf("%10s %14s",s.major,s.telephone); //输出专业 联系方式 printf("\n");
printf("-------------------------------------------\n"); } //键盘录入 void
ScanIn(Sqlist &l){ char a[2]; Status i; printf("\t 插入学生信息\n"); do{ Student s;
printf("\t 请输入学号:"); scanf("%s",s.number); printf("\t 请输入姓名(<=9个字符):");
scanf("%s",s.name); printf("\t 请输入性别:(m:男,f:女)"); scanf("%*c%c",&s.gender);
printf("\t 请输入专业:"); scanf("%s",s.major); printf("\t 请输入联系方式:");
scanf("%s",s.telephone); printf("\t 请输入你要插入的位置(1<=i<=%d):",l.length+1);
scanf("%d",&i); ListInsert(l,i,s); printf("\t 是否继续插入?(y/n)\t"); scanf("%s",a);
}while(strcmp(a,"y")==0||strcmp(a,"Y")==0); //调用strcmp函数 } //删除学生信息 Status
ListDelete(Sqlist &l,int i,Student s){ Status j; if(i<1||i>l.length) //i值不合法
return ERROR; else{ s=l.elem[i-1]; for(j=i;j<=l.length;j++)
l.elem[j-1]=l.elem[j]; l.length--; return OK; } } //判断姓名是否相同 Status
EqualName(Student s1,Student s2){ if(strcmp(s1.name,s2.name))return ERROR;
//比较两个字符串是否相同 else return OK; } //定位某个元素 int LocateElem(Sqlist l,Student
s,Status(*compare)(Student,Student)) { Status i=1; Student *p=l.elem;
while(i<=l.length&&!compare(*p++,s)) i++; if(i<=l.length) return i; //定位元素的位置
else return 0; } //修改学生信息 void ModifyName(Sqlist
&l,Status(*equal)(Student,Student)){ system("cls"); //清屏 Student s; Status j;
char number_new[15],name_new[20],gender_new, telephone_new[12],major_new[20];
char a[2]; do{ printf("\t 请输入你要更改的学生的姓名:"); scanf("%s",s.name);
j=LocateElem(l,s,equal); if(!j)printf("没有查找到你所要查找的学生记录!\n"); else {
print_single(l.elem[j-1]); int Order=1; printf("\n修改信息:1 学号,2 姓名,3 性别,4 专业,5
联系方式,0 取消\n") ; while(Order){ printf("--------------------------\n");
printf("请选择:"); scanf("%d",&Order); switch(Order){ case 1:
printf("请输入更改后的学号:"); scanf("%s",number_new);
strcpy(l.elem[j-1].number,number_new); break; case 2: printf("请输入更改后的姓名:");
scanf("%s",name_new); strcpy(l.elem[j-1].name,name_new); break; case 3:
printf("请输入更改后的性别:"); scanf("%*c%c",&l.elem[j-1].gender); break; case 4:
printf("请输入更改后的专业:"); scanf("%s",major_new);
strcpy(l.elem[j-1].major,major_new); break; case 5: printf("请输入更改后联系方式:");
scanf("%s",telephone_new); strcpy(l.elem[j-1].telephone,telephone_new); break;
} } printf("\n****更改后该条记录变为****\n\n"); print_single(l.elem[j-1]); }
printf("您想继续修改吗?(y/n)\t"); scanf("%s",a);
}while(strcmp(a,"y")==0||strcmp(a,"Y")==0); } //按照姓名查找 void searchName(Sqlist
l,Status(*equal)(Student,Student)){ system("cls"); //清屏 Student s; Status j;
char a[2]; do{ printf("\t 请输入查找学生的姓名:"); scanf("%s",s.name);
j=LocateElem(l,s,equal); if(!j)printf("没有查找到你所要查找的学生信息!\n"); else
print_single(l.elem[j-1]); printf("\t 是否继续查找?(y/n)\t"); scanf("%s",a);
}while(strcmp(a,"y")==0||strcmp(a,"Y")==0); } //主界面 void menu(){ system("cls");
//清屏 printf("\t\t**************************\n");
printf("\t\t***三峡大学学生管理系统***\n"); cout<<"\t\t**************************"<<endl;
printf("\t\t*\t请选择\t\t *\n"); printf("\t\t* 1:插入学生信息\t *\n"); printf("\t\t*
2:删除学生信息\t *\n"); printf("\t\t* 3:修改学生信息\t *\n"); printf("\t\t* 4:查找学生信息\t
*\n"); printf("\t\t* 5:显示学生信息\t *\n");
cout<<"\t\t**************************"<<endl; } int main(){ Sqlist l; Status
i,select; //select 变量标记用户的选择 if(InitList(l)!=OK) printf("\n\t线性表初始化失败!\n");
menu(); scanf("%d",&select); while(select){ switch(select){ case 6: menu();
break; case 1: //插入学生信息 system("cls"); //清屏 ScanIn(l);
printf("\n输入0:退出,输入6:返回主菜单\t"); break; case 3: //修改学生信息
ModifyName(l,EqualName); printf("\n输入0:退出,输入6:返回主菜单\t"); break; case 5:
print(l); break; case 4: //查找学生信息 searchName(l,EqualName);
printf("\n输入0:退出,输入6:返回主菜单\t"); break; case 2: //删除学生信息 system("cls"); //清屏
Student *s2=l.elem; print(l); printf("您想删除学生1~%d:\n",l.length); int k;
scanf("%d",&k); Student de_s; system("cls"); //清屏 if(ListDelete(l,k,de_s)==OK){
print(l); printf("\t%-6s 已经删除成功!\n",de_s.name); }
printf("\n输入0:退出,输入6:返回主菜单\t"); break; } scanf("%d",&select); } return 0; }

技术
下载桌面版
GitHub
百度网盘(提取码:draw)
Gitee
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:766591547
关注微信