详细解读C语言学生信息管理系统

简介: 详细解读C语言学生信息管理系统

一、需求分析

学生信息管理系统:

学生信息管理有许多使用功能,使用非常普遍。

需要有的功能是输入、输出、查找、排序、删除和修改等。

用菜单实现,界面功能简洁明了,需要容错,考虑人性化的设计。

二、总体设计

学生包含许多属性,考虑使用结构体来存储。由于不确定学生人数,还有要对信息增加、修改、删除等,使用动态链表实现较为方便。

菜单的设计根据用户的输入来执行不同的函数,有的函数中还要包括子菜单。

总体选择用switch-case

遇到的问题:学生信息管理系统最关键的就是录入信息,需要加容错

解决:输入单独写一个函数

遇到的问题:输入的学号不能重复

解决:用一个数组放学号,如果已经存在就置1,未存在为0

三、详细设计

编写的函数清单

函数调用关系图

Student add(Student head);//录入信息

该函数用来添加信息,里面调用了int input(Student p)输入函数

形参是链表的头指针,返回值是添加数据后的头指针

Student add(Student head)

{

Student p1;

while((p1=(Student )malloc(LEN))&&input(p1))

{

while(a【p1->num-190400】)

{

system("cls");

print(head);

printf("输入的学号%ld重复,请重新输入!\n",p1->num);

input(p1);

}

a【p1->num-190400】=1;

n++;

if(head==NULL)

{

head=p1;

p1->next=NULL;

}

else

{

p1->next=head;

head=p1;

}

system("cls");

}

system("cls");

free(p1);

return head;

}

View Code

void search(Student head);//查找信息

形参是链表的头指针,返回值是void

查找信息采用两种方式:按学号查找和按姓名查找

调用查找菜单函数void search_menu();

void search(Student head)

{

Student p1=head;

int choice=1;

long num;

char s【20】;

while(choice)

{

search_menu();

printf("请输入选择:");

scanf("%d",&choice);

if(choice==0)

{

system("cls");

break;

}

else if(choice==1)

{

system("cls");

p1=head;//如果不初始化,第二次查找会出错

printf("请输入学号查找 :");

scanf("%ld",&num);

while(p1->num!=num&&p1->next!=NULL)

{

p1=p1->next;

}

if(p1->num==num)

{

printf("找到了!\n");

printf("学号 姓名 年龄 性别\n");

printf("%4ld %6s %7d %5c\n",p1->num,p1->name,p1->age,p1->sex);

}

else

{

system("cls");

print(head);

printf("学号:%ld不存在!\n",num);

}

}

else if(choice==2)

{

system("cls");

p1=head;

printf("请输入姓名查找 :");

scanf("%s",s);

while(strcmp(p1->name,s)!=0&&p1->next!=NULL)

{

p1=p1->next;

}

if(strcmp(p1->name,s)==0)

//代码效果参考:http://www.zidongmutanji.com/bxxx/345428.html

{

printf("找到了!\n");

printf("学号 姓名 年龄 性别\n");

printf("%4ld %6s %7d %5c\n",p1->num,p1->name,p1->age,p1->sex);

}

else

{

system("cls");

print(head);

printf("学生:%s不存在!\n",s);

}

}

else

{

system("cls");

printf("请根据菜单重新输入!\n");

}

}

}

View Code

Student del(Student head);//删除信息

删除一条信息,用到链表的删除操作

形参是链表的头指针,返回值是删除数据后的头指针

删除方式有两种:输入学号或姓名

调用删除菜单函数:void del_menu();

Student del(Student head)

{

Student p1=head,p2;

int choice=1;

long num;

char s【20】;

while(choice)

{

del_menu();

printf("请输入选择:");

scanf("%d",&choice);

if(choice==0)

{

system("cls");

break;

}

else if(choice==1)

{

system("cls");

if(head==NULL)

{

printf("没有任何信息!\n");

return head;

}

p1=head;

printf("请输入要删除的学号:");

scanf("%ld",&num);

while(p1->num!=num&&p1->next!=NULL)

{

p2=p1;

p1=p1->next;

}

if(p1->num==num)//找到了要删除的数字

{

if(p1==head)//删除头结点

head=p1->next;

else//删除中间或尾结点

{

p2->next=p1->next;

}

a【p1->num-190400】=0;

p1=p1->next;

printf("删除成功!\n");

n--;

}

else

{

printf("没找到要删除的学号%ld!请重新输入\n",num);

}

}

else if(choice==2)

{

system("cls");

if(head==NULL)

{

printf("没有任何信息!\n");

return head;

}

p1=head;

printf("请输入要删除的姓名:");

scanf("%s",s);

while(strcmp(p1->name,s)!=0&&p1->next!=NULL)

{

p2=p1;

p1=p1->next;

}

if(strcmp(p1->name,s)==0)//找到了要删除的数字

{

if(p1==head)//删除头结点

head=p1->next;

else//删除中间或尾结点

{

p2->next=p1->next;

}

a【p1->num-190400】=0;

p1=p1->next;

printf("删除成功!\n");

n--;

}

else

{

printf("没找到要删除的姓名%s!请重新输入\n",s);

}

}

else

{

system("cls");

printf("请根据菜单重新输入!\n");

}

}

return head;

}

View Code

Student modify(Student head);//修改信息

形参是链表的头指针,返回值是修改数据后的头指针

先输入要修改的学号或姓名,找到之后再修改信息

调用修改菜单函数:void modify_menu();

Student modify(Student head)

{

Student *p1=head;

int choice,choice1;

long num;

char s【20】;

int age;

char sex;

if(head==NULL)

{

printf("没有任何信息!\n");

return head;

}

while(1)

{

printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");

printf("┃__0.退出__┃\n");

printf("┃__1.输入要修改的学生的学号__┃\n");

printf("┃__2.输入要修改的学生的姓名__┃\n");

printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");

printf("请输入选择:");

scanf("%d",&choice1);

if(choice1==0)

{

system("cls");

return head;

}

else if(choice1==1)

{

printf("要修改的学生的学号:");

scanf("%ld",&num);

p1=head;

while(p1->num!=num&&p1->next!=NULL)

{

p1=p1->next;

}

if(p1->num==num)

{

printf("当前信息:\n");

printf("学号 姓名 年龄 性别\n");

printf("%4ld %6s %7d %5c\n",p1->num,p1->name,p1->age,p1->sex);

while(1)

{

modify_menu();

printf("请输入选择:");

scanf("%d",&choice);

getchar();

if(choice==0)

{

system("cls");

break;

}

switch(choice)

{

case 1:

system("cls");

a【num-190400】=0;//修改这个学号要置零

printf("请输入修改后的学号:");

scanf("%ld",&num);

while(a【num-190400<span style="c

相关文章
|
2月前
|
存储 人工智能 机器人
【C/C++】C语言 学生信息管理系统(源码)【独一无二】
【C/C++】C语言 学生信息管理系统(源码)【独一无二】
|
2月前
|
存储 C语言
C语言实现简易学生信息管理系统
C语言实现简易学生信息管理系统
124 4
|
11月前
|
C语言
学生信息管理系统(C语言结构体数组版)
学生信息管理系统(C语言结构体数组版)
|
12月前
|
数据库 C语言
C语言加链表实现学生信息管理系统
用C语言加链表的知识实现简单的学生信息管理系统。(可以自己完善添加数据库,文件流等操作)
80 0
|
12月前
|
存储 算法 搜索推荐
C语言课题设计----学生学籍信息管理系统(附打包下载)
C语言课题设计----学生学籍信息管理系统(附打包下载)
|
C语言
c语言链表文件操作实现学生信息管理系统
c语言链表文件操作实现学生信息管理系统
|
C语言
C语言实现通讯录(类似学生信息管理系统)
C语言实现通讯录(类似学生信息管理系统)
201 0
C语言实现通讯录(类似学生信息管理系统)
|
存储 SQL 关系型数据库
C语言实验小项目实例源码大全订票信息管理系统贪吃蛇图书商品管理网络通信等
C语言实验小项目实例源码大全订票信息管理系统贪吃蛇图书商品管理网络通信等
88 0
|
Python
学生信息管理系统(C语言版)
学生信息管理系统(C语言版)
134 0
学生信息管理系统(通讯录)----------通俗易懂、附源码、C语言实现
学生信息管理系统(通讯录)----------通俗易懂、附源码、C语言实现