文章目录
结构(线性表)
0 头文件及全局变量
#define _CRT_SECURE_NO_WARNINGS //防止报错,也可以使用scanf_s更安全
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
int stunum = 0;//学生数量
#define initnum 5 //最大数量
1 菜单栏
//1 菜单栏
void menu()
{
printf("\t\t****Welcome to student Administration System****\n");
printf("\t\t****************************************\n");
printf("\t\t*1)Display all student information********\t\n");
printf("\t\t*2)Delete student information*************\t\n");
printf("\t\t*3)Add Student information****************\t\n");
printf("\t\t*4)Modify student information*************\t\n");
printf("\t\t*5)Query student information**************\t\n");
printf("\t\t*6)exit **************\t\n");
printf("\t\t*7)clear **************\t\n");
printf("\t\t*8)sort **************\t\n");
printf("\t\t****************************************\n");
}
2 存储数据:结构体封装
//2 存储数据
/* 信息的属性: 学号&姓名 */
typedef struct StudentData_
{
int ID;
char name[20];
}SD;
3 基本功能:
3.1显示所有信息
//3 基本功能
//3.1 显示所有学生信息
void showTotalScore(SD* sd,int sdnum)
{
for (int i = 0; i < sdnum; i++)
{
printf("ID:%d\tName:%s\n", sd[i].ID, sd[i].name);
}
}
3.2 添加一条信息
//3.2 添加学生信息
void addSI(SD* sd)
{
if (stunum >= initnum)
{
printf("抱歉,空间已满,无法添加了!!!\n");
return;
}
SD as;
printf("请输入该学生的学号:");
scanf("%d", &as.ID);
printf("请输入该学生的姓名:");
scanf("%s", as.name);
sd[stunum++] = as;
printf("添加成功\n");
}
3.3修改某一个数据
//3.3 修改学生信息
void modify(SD* sd,int sdnum)
{
int mId;
int flag=0;
int id;
printf("请输入你想修改的学生的学号:\n");
scanf("%d", &mId);
for (int i = 0; i < sdnum; i++)
{
if (mId == sd[i].ID)
{
id = i;
flag = 1;
}
}
if (flag == 1)
{
printf("找到了学号为%d的同学\n", mId);
printf("修改名字为:");
scanf("%s", sd[id].name);
printf("修改成功!!!\n");
}
else
{
printf("没找到啊,抱歉!\n");
}
}
3.4删除一条信息
//3.4 删除学生信息
void deletesd(SD* sd, int sdnum)
{
int mId;
int flag = 0;
int id;
printf("请输入你想删除的学生的学号:");
scanf("%d", &mId);
for (int i = 0; i < sdnum; i++)
{
if (mId == sd[i].ID)
{
id = i;
flag = 1;
printf("找到了!!!\n");
}
}
if (flag == 1)
{
stunum--;
for (int i = 0; i < sdnum; i++)
{
sd[id] = sd[id + 1];
}
}
else
{
printf("抱歉,没找到啊!\n");
}
}
3.5查找学生信息
//3.5 查找学生信息
void querysd(SD* sd,int sdnum)
{
int id;
int mId;
int flag=0;
printf("请输入你想查找的学生的学号:");
scanf("%d", &id);
for (int i = 0; i < sdnum; i++)
{
if (id == sd[i].ID)
{
flag = 1;
mId = i;
}
}
if (flag == 1)
{
printf("恭喜!找到了%d.\n", id);
printf("学生具体信息为:\n");
printf("ID:%d\tName:%s\n", sd[mId].ID, sd[mId].name);
}
else
{
printf("抱歉了,查无此人!!!\n");
}
}
4 扩展
4.1 排序(冒泡)
//4.1 排序(冒泡)
void sort_bub(SD* sd,int sdnum)
{
for (int i = 0; i < sdnum-1; i++)
{
for (int j = 0; j < sdnum-i-1; j++)
{
if (sd[j].ID > sd[j+1].ID)
{
SD t = sd[j];
sd[j] = sd[j + 1];
sd[j + 1] = t;
}
}
}
printf("排序成功!!!\n");
}
5 主函数
int main()
{
menu();
SD stu[initnum];
int select;
while (1)
{
printf("请输入数字来操作:");
scanf("%d", &select);
switch (select)
{
case 1:
showTotalScore(stu, stunum);
break;
case 2:
deletesd(stu, stunum);
break;
case 3:
addSI(stu);
break;
case 4:
modify(stu, stunum);
break;
case 5:
querysd(stu, stunum);
break;
case 6:
exit(0);
case 7:
system("cls");
menu();
break;
case 8:
sort_bub(stu, stunum);
break;
default:
break;
}
}
return 0;
}
ps:需要完整源码的可以找我.