通过建立一个链表来进行学生信息的存储,链表的节点通过结构体变量的指针来实现连接。在主函数里建立执行每个功能的选择结构,在选择结构中调用声明的功能函数来实现想要的功能。
本学生学籍管理系统存储的信息包括:学号、姓名、成绩
调用子函数来输出系统界面、从文件中读取信息,建立一个输入指令循环和指令选择,调用子函数来实现功能。
(2)显示系统界面
(3)新建学生信息(Create)
(4)通过学号查找学生信息(Find)
(5)插入学生信息(Insert)
(6)删除学生信息(Delete)
(7)修改学生信息(Change)
(8)读取学生信息(void Print)
创建链表和新建学生数据
#include<stdio.h>
#include<malloc.h>
#define LEN sizeof(struct student)
struct student
{
long num;
char name[10];
float score;
struct student*next;
};
int n;
struct student *i;
struct student *Create()
{
struct student*head,*p1,*p2;
p1=p2=(struct student*)malloc(LEN);
printf("请输入学生的学号 姓名 成绩, 若输入0 0 0则结束:\n");
scanf("%ld %s %f",&p1->num,&p1->name,&p1->score);
head=NULL;
while(p1->num!=0)
{
n=n+1;
if(n==1){head=p1;}
else{p2->next=p1;}
p2=p1;
p1=(struct student*)malloc(LEN);
printf("请输入学生的学号 姓名 成绩 若输入0 0 0则结束:\n");
scanf("%d %s %f",&p1->num,&p1->name,&p1->score);
}
p2->next=NULL;
i=p2;
return(head);
}
删除函数
struct student * Delete(struct student*head,long num)
{
struct student *p1,*p2;
p1=head;
if(head==NULL)
{
printf("还是空!\n");
return(head);
}
while(num!=p1->num&&p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
if(num==p1->num)
{
if(p1==head)
head=p1->next;
else p2->next=p1->next;
n=n-1;
printf("%ld 资料已删除.\n",num);
}
else printf("没有此学生\n");
return head;
}
插入函数
struct student * Insert(struct student *head,struct student *stu)
{
if(head==NULL)
{
head=stu;
stu->next=NULL;
}
else
{
n=n+1;
i->next=stu;
}
stu->next=NULL;
i=stu;
return head;
}
修改函数
struct student * Change(struct student*head,long num)
{
struct student*p1;
p1=head;
while(p1->num!=num)
{
p1=p1->next;
if(p1==NULL){printf("\n 无此学号.\n");return(head);}
}
printf("输入要更改的学生信息 格式为学号 姓名 成绩 若输入0 0 0则结束: ");
scanf("%ld %s %f",&p1->num,&p1->name,&p1->score);
return(head);
}
查找函数
struct student * Find(struct student*head,long num)
{
struct student *p;
p=head;
while(p->num!=num && p->next!=NULL)
p=p->next;
if(p->num==num)
{
printf("%15d%10s%8.1f\n",p->num,p->name,p->score);
printf("*******************************************************\n");
}
if(p->num!=num)
{
printf("\n 无此学号.\n");
printf("*******************************************************\n");
}
return (head);
}
输出函数
void Print(struct student *head)
{
struct student *p;
p=head;
if(p==NULL){printf("\n 还是空的!\n");}
else
{
printf("\n目前已有%d名学生资料\n",n);
printf(" 学号 姓名 分数\n");
while(p!=NULL)
{
printf("%15d%10s%8.1f\n",p->num,p->name,p->score);
p=p->next;
}
}
}
主函数
int main()
{
int a,b,c;
long num;
struct student *head;
struct student *stu;
stu=(struct student*)malloc(LEN);
printf("****************欢迎进入学生成绩管理系统***************\n\n\n\n");
printf("\t\t\t是否进入管理系统:\n\n");
printf("\t\t 是请输入'1',否请输入'0'\n\n");
printf("\t\t\t\t");
scanf("%d",&a);
printf("\n\n\n");
printf("*******************************************************\n");
if(a==0)return 0;
else if(a==1)
{
printf("\n\t\t\t 请先建立学生成绩\n");
head=Create();
printf("\n*******************************************************\n");
printf("\n\t\t\t 是否进行其他功能:\n");
printf("\n\t\t 是请输入'1',否请输入'0'\n\n");
printf("\n\t\t\t\t ");
scanf("%d",&c);
printf("\n*******************************************************\n");
while(c!=0)
{printf("\n\t\t\t 请选择服务项目:\n");
printf("\n\t\t[1].查找学生成绩\t[2].插入学生成绩\n\n\t\t[3].删除学生成绩\t[4].修改学生成绩\n\n\t\t[5].输出学生成绩\n\n");
printf("\t\t\t\t ");
scanf("%d",&b);
printf("\n*******************************************************\n");
switch(b)
{
case 1:{
if(head==NULL)
{printf("\n\t\t\t无效成绩查找\n");
printf("\n*******************************************************\n");
break;
}
printf("请输入查找学生的学号(若输入0则结束):");
scanf("%ld",&num);
while(num!=0)
{
head=Find(head,num);
printf("请输入查找学生的学号(若输入0则结束):");
scanf("%ld",&num);
}
printf("*******************************************************\n");
};break;
case 2:{
printf("请输入要插入的信息 格式为学号 姓名 成绩 若输入0 0 0则结束:");
stu=(struct student*)malloc(LEN);
scanf("%ld %s %f",&stu->num,&stu->name,&stu->score);
if(stu->num!=0)
{
head=Insert(head,stu);
Print(head);
}
else free(stu);
printf("*******************************************************\n");
};break;
case 3:{
if(head==NULL)
{
printf("\n\t\t\t 无成绩删除\n");
printf("\n*******************************************************\n");
break;
}
printf("请输入要删除的学号:(若输入0则结束)");
scanf("%ld",&num);
while(num!=0)
{
head=Delete(head,num);
Print(head);
printf("请输入要删除的学号:(若输入0则结束)");
scanf("%ld",&num);
}
printf("\n*******************************************************\n");
};break;
case 4:{
if(head==NULL)
{
printf("\n\t\t\t 无成绩修改\n");
printf("\n*******************************************************\n");break;
}
printf("请输入要更改的学号:(若输入0则结束)");
scanf("%ld",&num);
while(num!=0)
{
head=Change(head,num);
Print(head);
printf("请输入要更改的学号:(若输入0则结束)");
scanf("%ld",&num);
}
printf("*******************************************************\n");
};break;
case 5:{
Print(head);
printf("\n*******************************************************\n");
}break;
}
printf("是否进入其他功能:\n");
printf("是请输入'1',否请输入'0'\n");
scanf("%d",&c);
printf("*******************************************************\n");
}
}
return 0;
}
我是一个C的初学者,代码方面难免有错误重复繁琐等问题,希望大家及时批评指正。希望在以后的日子和大家一起共同进步!