学生数据管理系统(不完全)代码
guanli.h代码
#ifndef _GUANLI_H_
#define _GUANLI_H_
#define MAXSIZE 40
//定义顺序表类型
struct stu_info{
char num[12];
char name[10];
char sex[10];
char mobile_phone[12];
};
typedef struct StuList{
int len;
struct stu_info stu_info;
}StuList,*StuListPtr;
//打印菜单
void printmenu();
//创建顺序表
StuListPtr list_create();
//判满
int list_full(StuListPtr S);
//判空
int list_empty(StuListPtr S);
//遍历
void list_show(StuListPtr S);
//添加元素
int list_add(StuListPtr S);
//插入元素
int list_insert(StuListPtr S);
//删除元素
int list_delete(StuListPtr S);
//修改元素
int list_update(StuListPtr S);
//查找元素
int list_search(StuListPtr S);
#endif
guanli.c代码
#include "guanli.h"
#include
#include
#include
//创建顺序表
StuListPtr list_create()
{
//申请一个顺序表的空间大小
/* int i;
printf("请输入需要申请表的大小\n");
scanf("%d",&i);*/
StuListPtr S = (StuListPtr)malloc(sizeof(StuList)*MAXSIZE);
//判断申请是否成功
if(NULL == S){
printf("顺序表创建失败\n");
return NULL;
}
//此时顺序表已经创建成功
memset(S,0,sizeof(StuList));
printf("顺序表已经成功生成\n");
return S;
}
//判满
int list_full(StuListPtr S){
if(NULL == S){
printf("该顺序表不合法\n");
return -1;
}
return S->len == MAXSIZE;
}
//判空
int list_empty(StuListPtr S){
if(NULL ==S){
printf("该顺序表不合法\n");
return -1;
}
return S->len==0;
}
//遍历
void list_show(StuListPtr S){
if(NULL ==S||list_full(S)){
printf("顺序表不合法\n");
return ;
}
printf("学号\t名称\t性别\t手机号\n");
for(int i=0;ilen;i++){
printf("%s\t%s\t%s\t%s\t\n",(S+i)->stu_info.num,(S+i)->stu_info.name,(S+i)->stu_info.sex,(S+i)->stu_info.mobile_phone);
}
printf("\n");
}
//添加元素
int list_add(StuListPtr S){
if(NULL==S){
printf("顺序表不合法\n");
return -1;
}
char p='y';
while(p=='y' || p=='Y'){
printf("请输入学号:\n");
scanf("%s",(S+S->len)->stu_info.num);
printf("请输入名称:\n");
scanf("%s",(S+S->len)->stu_info.name);
printf("请输入性别:\n");
scanf("%s",(S+S->len)->stu_info.sex);
printf("请输入手机号:\n");
scanf("%s",(S+S->len)->stu_info.mobile_phone);
S->len++;
printf("添加成功\n");
printf("继续输入请输入Y/y终止输入请输入其他字符\n");
do{
p=getchar();
}while(p=='\n');
}
return 1;
}
//打印菜单
void printmenu(){
printf("+-----------------------------------------------+\n");
printf("| 学生基本信息管理 |\n");
printf("| 1.基本信息插入. |\n");
printf("| 2.基本信息修改 |\n");
printf("| 3.基本信息删除. |\n");
printf("| 4.基本信息显示 |\n");
printf("| 5.基本信息查找 |\n");
printf("| q.退出 |\n");
printf("| 请输入你的选择(序号或字母): |\n");
printf("+-----------------------------------------------+\n");
}
//插入元素
int list_insert(StuListPtr S){
int pos;
printf("请输入需要插入的位置\n");
scanf("%d",&pos); //取得位置
if(NULL ==S || list_full(S)||pos<0||pos>S->len ){
printf("顺序表不合法\n");
return -1;
}
char p='y';
while(p=='y' || p=='Y'){
for(int i=S->len-1;i>=pos;i--){
S[i+1]=S[i]; //将位置后方的元素后移一位
}
printf("请输入学号:\n");
scanf("%s",S[pos].stu_info.num);
printf("请输入名称:\n");
scanf("%s",S[pos].stu_info.name);
printf("请输入性别:\n");
scanf("%s",S[pos].stu_info.sex);
printf("请输入手机号:\n");
scanf("%s",S[pos].stu_info.mobile_phone);
S->len++; //长度增加
pos++; //插入位置后移方便下次插入
printf("插入元素成功\n");
printf("继续插入请输入Y/y终止插入请输入其他字符\n");
do{
p=getchar();
}while(p=='\n');
}
return 1;
}
//删除元素
int list_delete(StuListPtr S){
int pos;
printf("请输入需要删除的位置\n");
scanf("%d",&pos); //取得位置
if(NULL ==S || list_empty(S)||pos<0||pos>S->len ){
printf("顺序表不合法\n");
return -1;
}
for(int i=pos+1;ilen;i++){
S[i-1]=S[i]; //将位置后方的元素后移一位
}
S->len--; //顺序表长度减少一位
printf("删除成功\n");
return 1;
}
//修改元素
int list_update(StuListPtr S){
int pos;
printf("请输入需要修改的位置\n");
scanf("%d",&pos); //取得位置
if(NULL ==S || list_empty(S)||pos<0||pos>S->len ){
printf("顺序表不合法\n");
return -1;
}
char a;
printf("请输入需要修改的值的类型\n");
printf(" 1.修改学号\n");
printf(" 2.修改名称\n");
printf(" 3.修改性别\n");
printf(" 4.修改手机号\n");
printf(" q.退出\n");
do{
a=getchar();
}while(a=='\n');
switch(a){ //选择修改哪项数据
case '1':
printf("请输入学号:\n");
scanf("%s",S[pos].stu_info.num);
printf("修改完成\n");
break;
case '2':
printf("请输入名称:\n");
scanf("%s",S[pos].stu_info.name);
printf("修改完成\n");
break;
case '3':
printf("请输入性别:\n");
scanf("%s",S[pos].stu_info.sex);
printf("修改完成\n");
break;
case '4':
printf("请输入手机号:\n");
scanf("%s",S[pos].stu_info.mobile_phone);
printf("修改完成\n");
break;
default:
break;
return 1;
}
}
//查找元素
int list_search(StuListPtr S){
if(NULL==S||list_empty(S)){
printf("顺序表不合法");
return -1;
}
printf("请输入需要查找的值的类型\n");
printf(" 1.通过学号查找\n");
printf(" 2.通过名称查找\n");
printf(" 3.通过手机号查找\n");
printf(" q.退出\n");
char a;
do{
a=getchar();
}while(a=='\n');
char zhi[20];
switch(a){ //选择查找哪项数据
case '1':
printf("请输入需要查找的学号");
scanf("%s",zhi);
for(int i=0;ilen;i++){
if(i==0) printf("学号\t名称\t性别\t手机号\n");
if(strcmp(S[i].stu_info.num,zhi)==0){
printf("%s\t%s\t%s\t%s\t\n",(S+i)->stu_info.num,(S+i)->stu_info.name,(S+i)->stu_info.sex,(S+i)->stu_info.mobile_phone);
}
}
break;
case '2':
printf("请输入需要查找的名称");
scanf("%s",zhi);
for(int i=0;ilen;i++){
if(i==0) printf("学号\t名称\t性别\t手机号\n");
if(strcmp(S[i].stu_info.name,zhi)==0){
printf("%s\t%s\t%s\t%s\t\n",(S+i)->stu_info.num,(S+i)->stu_info.name,(S+i)->stu_info.sex,(S+i)->stu_info.mobile_phone);
}
}
break;
case '3':
printf("请输入需要查找的手机号");
scanf("%s",zhi);
for(int i=0;ilen;i++){
if(i==0) printf("学号\t名称\t性别\t手机号\n");
if(strcmp(S[i].stu_info.mobile_phone,zhi)==0){
printf("%s\t%s\t%s\t%s\t\n",(S+i)->stu_info.num,(S+i)->stu_info.name,(S+i)->stu_info.sex,(S+i)->stu_info.mobile_phone);
}
}
break;
default:
break;
return 1;
}
}
测试代码
main.c
#include "guanli.h"
int main(int argc, const char *argv[])
{
StuListPtr S=list_create();
char a;
while(1){
printmenu();
do{
a =getchar();
}while(a =='\n');
if(a=='q')
return 0;
switch(a){
case '1':
list_add(S);
break;
case '2':
list_update(S);
break;
case '3':
list_delete(S);
break;
case '4':
list_show(S);
break;
case '5':
list_search(S);
break;
default:
break;
}
printf("请按任意键继续:\n");
getchar();
getchar();
system("clear");
}
}