学生管理系统-C语言
大一上学习了c语言,同时为了交作业,就选择写一个简单的学生管理系统,主要运用了结构体,函数,链表,数组,分支,循环等C语言知识.有能力的同学可以自行补上文件操作的知识哦!
代码实现的流程有通过结构体创建学生信息(包括学号,姓名以及高数,英语,C语言的成绩),之后通过各个函数来实现学生信息的添加,修改,删除,查询,以及显示,最后通过一个主菜单进行调用各个函数功能.
代码如下,每个函数都有声明哦,所以我相信你们都会看懂每个函数的功能.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct student
{
long ID;//学号
char name[15];//姓名
int score[3];//高数,英语,C语言的成绩
struct student *next;
} S;
/*
函数功能: 学生信息输入
函数入口参数:头指针
返回值类型: 返回头指针
*/
S *InputStudentDate(S *head)
{
S *pr=head,*p=NULL;
int i;
p=(S*)malloc(sizeof(S));
if(p==NULL)
{
printf("Sorry, the system has failed!\n");
exit(0);
}
if(head==NULL)
{
head=p;
}
else
{
while(pr->next!=NULL)
{
pr=pr->next;
}
pr->next=p;
}
printf("学生学号:");
scanf("%ld",&p->ID);
printf("学生姓名:");
getchar();
scanf("%s",p->name);
printf("请分别输入该学生的高数,英语,C语言成绩:");
for(i=0; i<3; i++)
{
scanf("%d",&p->score[i]);
}
printf("***学生信息添加成功!***\n");
p->next=NULL;
return head;
}
/*
函数功能: 通过输入学号进行学生信息修改
函数入口参数:头指针
返回值类型: 返回头指针
*/
S *ChangeStudent(S *head)
{
S *pr=head,*temp=NULL;
long ID;
int choose=0;
char reply='y';
if(head==NULL)
{
printf("不存在学生信息,无法修改!\n");
return head;
}
printf("请输入想要修改的学生ID:");
scanf("%ld",&ID);
while(reply=='y' || reply =='Y')
{
for(; pr!=NULL; pr=pr->next)
{
if(pr->ID==ID)
{
temp=pr;
break;
}
}
if(temp==NULL)
{
printf("输入的ID不存在!\n");
printf("是否继续,是y(Y),请选择:");
getchar();
scanf("%c",&reply);
if(reply=='Y' || reply=='y')
{
printf("请重新输入想要修改的学生ID:");
scanf("%ld",&ID);
pr=head;
}
else
{
return head;
}
}
else
{
reply='n';
}
}
if(temp!=NULL)
{
pr=temp;
temp=NULL;
while(1)
{
printf("***********学生信息修改***********\n");
printf(" 1.修改学号 \n");
printf(" 2.修改姓名\n");
printf(" 3.修改高数成绩\n");
printf(" 4.修改英语成绩\n");
printf(" 5.修改C语言成绩\n");
printf(" 6.返回上一层\n");
printf("**********************************\n");
printf("请选择:");
scanf("%d",&choose);
if(choose==1)
{
printf("请输入新的学号:");
scanf("%ld",&pr->ID);
}
else if(choose==2)
{
printf("请输入新的学生姓名:");
scanf("%s",pr->name);
}
else if(choose==3)
{
printf("请输入新的高数成绩:");
scanf("%d",&pr->score[0]);
}
else if(choose==4)
{
printf("请输入新的英语成绩:");
scanf("%d",&pr->score[1]);
}
else if(choose==5)
{
printf("请输入新的C语言成绩:");
scanf("%d",&pr->score[2]);
}
else if(choose==6)
{
return head;
}
else
{
printf("输入错误!\n");
}
}
}
return head;
}
/*
函数功能: 学生信息删除
函数入口参数:头指针
返回值类型: 返回头指针
*/
S *DeleteStudentDate(S *head)
{
long ID;
S *pr=head,*p=head;
if(head==NULL)
{
printf("没有学生信息哦!\n");
return head;
}
else
{
printf("请输入想要删除的学生ID:");
scanf("%ld",&ID);
while(pr->next!=NULL && pr->ID!=ID)
{
p=pr;
pr=pr->next;
}
if(pr->ID==ID)
{
if(pr==head)
{
head=pr->next;
}
else
{
p->next=pr->next;
}
free(pr);
printf("**删除成功**\n");
}
else
{
printf("对不起,没有找到该学生!\n");
}
return head;
}
}
/*
函数功能: 学生信息查询
函数入口参数:头指针
返回值类型: 返回头指针
*/
S *QueryStudentData(S *head)
{
S *pr=head,*temp=NULL,*pp=NULL;
long ID;
if(head==NULL)
{
printf("不存在学生信息,无法查询!\n");
return head;
}
printf("请输入想要查询的用户账号:");
scanf("%ld",&ID);
for(pr=head; pr!=NULL; pr=pr->next)
{
if(pr->ID==ID)
{
temp=pr;
break;
}
}
if(temp==NULL)
{
printf("输入的学生ID不存在!\n");
return head;
}
if(temp!=NULL)
{
pr=temp;
printf("----------------学生信息如下------------------\n");
printf(" 1.学号:%-10d\n",pr->ID);
printf(" 2.姓名:%-10s\n",pr->name);
printf(" 3.高数:%-6d\n",pr->score[0]);
printf(" 4.英语:%-6d\n",pr->score[1]);
printf(" 5.C语言:%-6d\n",pr->score[2]);
printf("----------------------------------------------\n");
}
return head;
}
/*
函数功能: 学生信息显示
函数入口参数:头指针
返回值类型: 返回头指针
*/
S *DisplayReaderData(S *head)
{
S *pr=head;
if(head==NULL)
{
printf("没有学生信息哦!\n");
return head;
}
printf("----------------学生信息如下------------------\n");
while(pr!=NULL)
{
printf(" 1.学号:%-10d",pr->ID);
printf(" 2.姓名:%-10s",pr->name);
printf(" 3.高数:%-6d",pr->score[0]);
printf(" 4.英语:%-6d",pr->score[1]);
printf(" 5.C语言:%-6d\n",pr->score[2]);
printf("----------------------------------------------\n");
pr=pr->next;
}
return head;
}
void Menu(S *head)
{
int choose;
while(1)
{
printf("*************************************************\n");
printf(" 1.学生信息输入\n");
printf(" 2.学生信息修改\n");
printf(" 3.学生信息删除\n");
printf(" 4.学生信息查询\n");
printf(" 5.学生信息显示\n");
printf(" 6.退出\n");
printf("*************************************************\n");
printf("请选择:");
scanf("%d",&choose);
if(choose==1)
{
head=InputStudentDate(head);
}
else if(choose==2)
{
head=ChangeStudent(head);
}
else if(choose==3)
{
head=DeleteStudentDate(head);
}
else if(choose==4)
{
head=QueryStudentData(head);
}
else if(choose==5)
{
head=DisplayReaderData(head);
}
else if(choose==6)
{
exit(0);
}
else
{
printf("输如错误,请重新输入!\n");
}
}
}
int main()
{
S *head=NULL;
Menu(head);
}
总结
我认为我写的代码还是有很多的缺陷与功能上的不足,比如没有使用文件操作,将数据保存到文件当中,同时,没有根据学生成绩去进行学生信息的排名,当然每个人都有自己的想法,相信大家肯定会想到更多新功能的.而且我也特别相信大家有能力去增加文件操作的代码喽.
当然,我认为我代码的书写规范还算是合格的吧,大家也可以对比一下,写的比我好的一定也要告诉我哦.毕竟好知识是要分享的.
最后希望大家不要只去看代码,毕竟好记性不如烂笔头.自己写出来才是王道.