管理系统有四部分组成,即增删改查,由于没有时间的缘故,增加和修改的模块没有完成,如果有需要的的自行下载,然后自行补充代码,锻炼锻炼自己的编程能力(我也是一个小白),我用链表做的学生管理系统有一个缺点,就是删除的时候没有,不能删除第一条的信息。希望能帮助到各位小白,让我们一起努力,一起进步,加油!
本代码只是提供给和我一样的小白参考,大佬可以忽略
#include<windows.h>
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<malloc.h>
#include<string.h>
#define SIZE sizeof(struct school)
//结构体声明
struct student {
char num[20]; //学号
char name[15]; //姓名
int age; //年龄
char major[18]; //专业
char clas[8]; //班级
int grade; //年级
};
struct school {
int schCode; //学校代码
char schName[20];//学校名称
char schPosition[15];//学校所在地
struct student Stu;
struct school* next;
};
//全局变量
//函数声明区域
void menu();//菜单选项
struct school* initInfo(); //添加信息
bool judgeChar();//是否需要录入信息
void showInfo(struct school* pm); //显示信息
void delInfo(struct school* pm); //删除信息
void childrenmMenu(); //子菜单
void chailrenMenu();
void delByNum(struct school*); //通过学号删除信息
void delByName(struct school*); //通过姓名删除信息
void modifyInfo(struct school*);//修改信息
void findInfo(struct school*); //查找信息
void fdByNum(struct school*); //通过学号查找信息
void fdByName(struct school*); //通过姓名查找信息
void addInfo(struct school*);//添加信息
void escSystem();//退出管理系统
//代码区域
//菜单选项
void menu() {
printf("\t\t\t------------系统管理------------\n");
printf("\t\t\t--------------------------------\n");
printf("\t\t\t--------------------------------\n");
printf("\t\t\t----------1、初始化信息---------\n");
printf("\t\t\t--------------------------------\n");
printf("\t\t\t----------2、显示信息-----------\n");
printf("\t\t\t--------------------------------\n");
printf("\t\t\t----------3、删除信息-----------\n");
printf("\t\t\t--------------------------------\n");
printf("\t\t\t----------4、修改信息-----------\n");
printf("\t\t\t--------------------------------\n");
printf("\t\t\t----------5、查询信息-----------\n");
printf("\t\t\t--------------------------------\n");
printf("\t\t\t----------6、添加信息-----------\n");
printf("\t\t\t--------------------------------\n");
printf("\t\t\t----------0、退出系统-----------\n");
printf("\t\t\t--------------------------------\n");
printf("\t\t\t--------------------------------\n");
printf("\t\t\t请选择>>:");
}
//添加信息
struct school* addInfo() {
struct school* head, * p1, * p2;
head = NULL;
p1 = p2 = NULL;
p1 = p2 = (struct school*)malloc(SIZE);
head = p1;
while (true) {
printf("\t\t\t是否需要添加信息(Y/N):");
if (judgeChar()) {
printf("\t\t\t请输入学校代码:");
scanf("%d", &p2->schCode);
printf("\t\t\t请输入学校所在地:");
scanf("%s", p2->schPosition);
printf("\t\t\t请输入学校名称:");
scanf("%s", p2->schName);
printf("\t\t\t请输入学号:");
scanf("%s", p2->Stu.num);
printf("\t\t\t请输入姓名:");
scanf("%s", p2->Stu.name);
printf("\t\t\t请输入年龄:");
scanf("%d", &p2->Stu.age);
printf("\t\t\t请输入专业:");
scanf("%s", p2->Stu.major);
printf("\t\t\t请输入班级:");
scanf("%s", p2->Stu.clas);
printf("\t\t\t请输入年级:");
scanf("%d", &p2->Stu.grade);
p2= (struct school*)malloc(SIZE);
p2->next = NULL;
p1->next = p2;
p1 = p2;
}
else{
printf("\t\t\t正在返回主页面:\n");
Sleep(2000);
printf("\t\t\t返回成功:\n");
break;
}
}
return head;
}
//判断是否需要录入信息
bool judgeChar() {
char ch[5];
scanf("%s", ch);
if (*ch == 'y' || *ch == 'Y') {
return true;
}
else if(*ch=='n'||*ch=='N') {
return false;
}
else {
printf("\t\t\t请重新输入(N/Y):");
judgeChar();
}
}
//显示信息
void showInfo(struct school *pa) {
struct school* H;
H = NULL;
H = pa;
if (H == NULL) {
printf("\t\t\t查询表没有信息,请输入在查询\n\n");
Sleep(1000);
return;
}
else
{
while (H->next != NULL)
{
printf("\t\t\t学校代码为:%d\n", H->schCode);
printf("\t\t\t学校所在地:%s\n", H->schPosition);
printf("\t\t\t学校名称:%s\n", H->schName);
printf("\t\t\t学号:%s\n", H->Stu.num);
printf("\t\t\t姓名:%s\n", H->Stu.name);
printf("\t\t\t年龄:%d岁\n", H->Stu.age);
printf("\t\t\t专业:%s\n", H->Stu.major);
printf("\t\t\t班级:%s\n", H->Stu.clas);
printf("\t\t\t年级:%d\n", H->Stu.grade);
printf("\t\t\t<<-------------------------->>\n");
printf("\t\t\t<<-------------------------->>\n");
H = H->next;
}
printf("\t\t\t查询完毕,退出系统\n\n");
Sleep(2000);
}
return;
}
//删除信息
void delInfo(struct school* pm) {
int delSel;
struct school* del;
del = NULL;
del = pm;
while (true) {
childrenmMenu();
scanf("%d", &delSel);
switch (delSel)
{
case 1:delByNum(del);
break;
case 2:delByName(del);
break;
case 0:printf("\t\t\t\t返回主菜单\n"); Sleep(1000); return;
break;
default:
break;
}
}
}
//通过学号删除信息
void delByNum(struct school* delNum) {
char NUM[20];
memset(NUM, 0, 20);
struct school* D_Num;
D_Num = NULL;
printf("\t\t\t\t请输入学号:");
scanf("%s", NUM);
while (delNum->next != NULL) {
D_Num = delNum->next;
if (strcmp(D_Num->Stu.num,NUM)==0 ){
printf("\t\t\t\t匹配成功\n");
Sleep(1000);
printf("\t\t\t\t正在删除\n");
delNum->next = D_Num->next;
free(D_Num);
Sleep(2000);
printf("\t\t\t\t删除成功\n");
Sleep(1000);
break;
}
else {
delNum = delNum->next;
}
}
}
//通过姓名删除信息
void delByName(struct school* delName) {
char NAME[20];
memset(NAME, 0, 20);
struct school* D_Name;
D_Name = NULL;
printf("\t\t\t\t请输入姓名:");
scanf("%s", NAME);
while (delName->next != NULL) {
D_Name = delName->next;
if (strcmp(D_Name->Stu.name, NAME) == 0) {
printf("\t\t\t\t匹配成功\n");
Sleep(1000);
printf("\t\t\t\t正在删除\n");
delName->next = D_Name->next;
free(D_Name);
Sleep(2000);
printf("\t\t\t\t删除成功\n");
Sleep(1000);
break;
}
else {
delName = delName->next;
}
}
}
//删除信息的子菜单
void childrenmMenu() {
printf("\t\t\t\t----------删除选项---------\n");
printf("\t\t\t\t---------------------------\n");
printf("\t\t\t\t------1、通过学号删除------\n");
printf("\t\t\t\t------2、通过姓名删除------\n");
printf("\t\t\t\t------0、返回主菜单--------\n");
printf("\t\t\t\t===========================\n");
printf("\t\t\t\t请选择删除范式>>:");
}
//修改信息
void modifyInfo(struct school* mdInfo) {
struct school* mdINFO;
mdINFO = NULL;
printf("\t\t\t本模块代码内容自己添加\n");
printf("\t\t\t\n");
}
//查询子菜单
void childrenMenu() {
printf("\t\t\t\t----------查询选项---------\n");
printf("\t\t\t\t---------------------------\n");
printf("\t\t\t\t------1、通过学号查询------\n");
printf("\t\t\t\t------2、通过姓名查询------\n");
printf("\t\t\t\t------0、返回主菜单--------\n");
printf("\t\t\t\t===========================\n");
printf("\t\t\t\t请选择删除范式>>:");
}
//查找信息
void findInfo(struct school* fdInfo) {
int fdSel;
while (true)
{
childrenMenu();
scanf("%d", &fdSel);
switch (fdSel)
{
case 1:fdByNum(fdInfo);
break;
case 2:fdByName(fdInfo);
break;
case 0:printf("\t\t\t\t返回主菜单\n"); Sleep(1000); return;
break;
default:
break;
}
}
}
//通过学号查找信息
void fdByNum(struct school* F) {
char num1[20];
memset(num1, 0, 20);
struct school* fdNum;
fdNum = NULL;
fdNum = F;
printf("\t\t\t\t请输入要查找的学号:");
scanf("%s", num1);
while (fdNum != NULL) {
if (strcmp(fdNum->Stu.name, num1) == 0) {
printf("\t\t\t\t学校代码为:%d\n", fdNum->schCode);
printf("\t\t\t\t学校所在地:%s\n", fdNum->schPosition);
printf("\t\t\t\t学校名称:%s\n", fdNum->schName);
printf("\t\t\t\t学号:%s\n", fdNum->Stu.num);
printf("\t\t\t\t姓名:%s\n", fdNum->Stu.name);
printf("\t\t\t\t年龄:%d岁\n", fdNum->Stu.age);
printf("\t\t\t\t专业:%s\n", fdNum->Stu.major);
printf("\t\t\t\t班级:%s\n", fdNum->Stu.clas);
printf("\t\t\t\t年级:%d\n", fdNum->Stu.grade);
}
else {
fdNum = fdNum->next;
}
}
}
//通过姓名查找信息
void fdByName(struct school* D) {
char name[20];
memset(name, 0, 20);
struct school* fdName;
fdName = NULL;
fdName = D;
printf("\t\t\t\t请输入要查找的姓名:");
scanf("%s", name);
while (fdName->next != NULL) {
if (strcmp(fdName->Stu.name, name) == 0) {
printf("\t\t\t\t学校代码为:%d\n", fdName->schCode);
printf("\t\t\t\t学校所在地:%s\n", fdName->schPosition);
printf("\t\t\t\t学校名称:%s\n", fdName->schName);
printf("\t\t\t\t学号:%s\n", fdName->Stu.num);
printf("\t\t\t\t姓名:%s\n", fdName->Stu.name);
printf("\t\t\t\t年龄:%d岁\n", fdName->Stu.age);
printf("\t\t\t\t专业:%s\n", fdName->Stu.major);
printf("\t\t\t\t班级:%s\n", fdName->Stu.clas);
printf("\t\t\t\t年级:%d\n", fdName->Stu.grade);
}
else {
fdName = fdName->next;
}
}
}
//添加信息
void addInfo(struct school*) {
printf("\t\t\t本模块代码内容自己添加\n");
printf("\t\t\t\n");
}
//退出系统
void escSystem(){
printf("\t\t\t正在退出管理系统\n");
Sleep(2000);
printf("\t\t\t退出成功\n");
exit(0);
}
//入口函数(主函数)
int main() {
int sel;
struct school* param;
param = NULL;
while (true) {
menu();
scanf("%d",&sel);
switch (sel)
{
case 1:param = addInfo();
break;
case 2:showInfo(param);
break;
case 3:delInfo(param);
break;
case 4:modifyInfo(param);
break;
case 5:findInfo(param);
break;
case 6:addInfo(param);
break;
case 0:escSystem();
break;
default:printf("\t\t\t输入有误,请重新输入\n");
break;
}
}
free(param);
return 0;
}