简单详细版学生管理系统使用顺序表
功能:能录入学生信息、删除学生信息、修改学生信息,查询学生信息
具体实现代码
头文件和重命名
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 100
typedef stu data_t;
定义结构体
typedef struct STU{
char xuehao[20]; //学号
char name[20]; //姓名
float score; //成绩
}stu;
定义顺序表
typedef struct list{
data_t data[SIZE];
int last;
}seqlist;
各个功能板块函数声明
//初始化(malloc)
seqlist *createSeqlist();
//判空: 空的话返回1
int seqlist_is_empty(seqlist *seq);
//判满: 满的话返回1
int seqlist_is_full(seqlist *seq);
//求学生数量
int seqlist_length(seqlist *seq);
//插入学生信息
int seqlistInsert(seqlist *seq);
//按学号查找
int seqlistFindByXuehao(seqlist *seq, char *xuehao);
//按姓名查找
int seqlistFindByData(seqlist *seq, char *name);
//删除学生信息
int seqlistDeleteByNum(seqlist *seq,char *num);
//根据分数修改
int seqlistChangeByScore(seqlist *seq);
//输出
void seqlist_dispaly(seqlist *seq);
//功能菜单
void menu();
//清空顺序表
void seqlistClear(seqlist *seq);
函数功能具体的实现
初始化
seqlist *createSeqlist()
{
seqlist *seq = (seqlist *)malloc(sizeof(seqlist));
if(NULL == seq)
{
perror("malloc");
return NULL;
}
memset(seq->data, 0, sizeof(data_t)*SIZE);//清零
seq->last = -1;
return seq;
}
判空
//判空: 空的话返回1
int seqlist_is_empty(seqlist *seq)
{
return (seq->last == -1)?1:0;
}
判满
//判满: 满的话返回1
int seqlist_is_full(seqlist *seq)
{
return (seq->last == SIZE -1)?1:0;
}
求学生数量
//求学生数量
int seqlist_length(seqlist *seq)
{
return seq->last+1;
}
插入信息
//插入学生信息
int seqlistInsert(seqlist *seq)
{
if (seqlist_is_full(seq))
{
printf("该表已满。");
return -1;
}
seq->last++;
puts("请按以下格式输入\n学号 姓名 成绩");
scanf("%s %s %f",seq->data[seq->last].xuehao,seq->data[seq->last].name,&seq->data[seq->last].score);
return 0;
}
查找
//按学号查找
int seqlistFindByXuehao(seqlist *seq, char *xuehao)
{
if (seqlist_is_empty(seq))
{
printf("该表为空。");
return -1;
}
int i;
for(i=0; i<=seq->last; i++)
{
if( strcmp( seq->data[i].xuehao, xuehao ) == 0 )
{
printf("找到该学生\n");
printf("学号 姓名 成绩\n");
printf("%s %s %.2f\n", seq->data[i].xuehao, seq->data[i].name,seq->data[i].score);
return i;//返回学生的位置
}
}
printf("没有这个学生\n");
return -1;
}
//按姓名查找
int seqlistFindByData(seqlist *seq, char *name)
{
if(seqlist_is_empty(seq))
return -1;
int i;
for(i=0; i<=seq->last; i++)
{
if( strcmp( seq->data[i].name, name ) == 0 )
{
printf("找到该学生\n");
printf("学号 姓名 成绩\n");
printf("%s %s %.2f\n", seq->data[i].xuehao, seq->data[i].name,seq->data[i].score);
return 0;
}
}
printf("没有这个学生\n");
return -1;
}
删除
//删除学生信息
int seqlistDeleteByNum(seqlist *seq,char *num)
{
if (seqlist_is_empty(seq))
{
printf("该表为空。");
return -1;
}
else
{
for (int j=0;j<=seq->last;j++)
{
if (!strcmp(seq->data[j].xuehao,num))
{
int pos = j+1;
for (int i=pos-1;i<seq->last;i++)
{
strcpy(seq->data[i].name,seq->data[i+1].name);
strcpy(seq->data[i].xuehao,seq->data[i+1].xuehao);
seq->data[i].score = seq -> data[i+1].score;
}
break;
}
}
}
seq->last--;
return 0;
}
修改
//根据分数修改
int seqlistChangeByScore(seqlist *seq)
{
int x,y;
printf("输入要修改的成绩和修改后的成绩:\n");
scanf("%d %d",&x,&y);
for (int i=0;i<=seq->last;i++)
{
if (seq->data[i].score == x)
{
seq->data[i].score = y;
printf("修改成功\n");
}
}
return 0;
}
输出
//输出全部学生信息
void seqlist_dispaly(seqlist *seq)
{
if(seqlist_is_empty(seq))
{
printf("The list is empty.\n");
}
printf("学号 姓名 成绩\n");
int i;
for(i=0; i<= seq->last ;i++)
{
printf("%s %s %.2f\n", seq->data[i].xuehao, seq->data[i].name,seq->data[i].score);
}
}
功能菜单
//功能菜单
void menu()
{
puts("******************************************");
puts("+++++++++++欢迎来到学生管理系统+++++++++++");
puts("******************************************");
puts("+++++****** 1.添加学生信息 ******+++++++");
puts("******************************************");
puts("+++++****** 2.姓名查找学生 ******+++++++");
puts("******************************************");
puts("+++++****** 3.学号查找学生 ******+++++++");
puts("******************************************");
puts("+++++****** 4.显示学生信息 ******+++++++");
puts("******************************************");
puts("+++++****** 5.删除学生信息 ******+++++++");
puts("******************************************");
puts("+++++****** 6.统计所有学生 ******+++++++");
puts("******************************************");
puts("+++++****** 7.修改学生成绩 ******+++++++");
puts("******************************************");
puts("+++++****** 8.清空学生信息 ******+++++++");
puts("******************************************");
puts("+++++****** 0.退出学生系统 ******+++++++");
puts("******************************************");
puts("+++++ 请输入对应序号执行对应的操作 +++++");
puts("******************************************");
}
//清空顺序表
void seqlistClear(seqlist *seq)
{
seq->last = -1;
}
主函数
//主函数
int main(int argc, const char *argv[])
{
seqlist *seq = createSeqlist();//创建表
if(NULL == seq)
{
printf("createSeqlist failed\n");
return -1;
}
int a ;
char n[20] = {0};
char i[20] = {0};
char num[20] = {0};
while(1)
{
menu();
scanf("%d",&a);
switch(a)
{
case 1 :seqlistInsert(seq);break;//输入信息
case 2 :
printf("请输入要查询的姓名:");
scanf("%s",n);
seqlistFindByData(seq,n);
break;//根据name查找信息
case 3 :/
printf("请输入要查询的学号:");
scanf("%s",i);
seqlistFindByXuehao(seq,i);
break;//根据学号查找信息
case 4 :seqlist_dispaly(seq);break;//显示所有学生信息
case 5 :
printf("输入删除学号:");
scanf("%s",num);//删除学生
seqlistDeleteByNum(seq,num);
printf("删除成功\n");
break;
case 6 :
printf("总共有%d位学生!!!!\n",seqlist_length(seq));
break;//统计学生数量
case 7 :
seqlistChangeByScore(seq);//修改成绩
break;
case 8 :seqlistClear(seq);seqlist_dispaly(seq);break;
case 0 :return 0;
default:break;
}
}
return 0;
}
销毁顺序表
void seqlist_destroy(seqlist **seq)
{
free(*seq);
*seq = NULL;
}
个人总结
主要是对顺序表的操作,增删改查,画图理解顺序表,熟悉顺序表的原理就行!*还有对顺序表的销毁,文章未写。