简单写了一个学生管理系统,用单链表的方法写的,有问题可以私信我哦
#include "stdio.h"
#include "stdlib.h"
//结构体
typedef struct stu{
char *stuname;
char *sex;
int stunumber;
int stuscore;
struct stu* next;
}Stu;
//创建链表
Stu * creatNode(void)
{
Stu* head = (Stu*)malloc(sizeof(Stu));//开辟空间
head->next = NULL;// 头节点
return head;
}
//尾插法
void AppendStuNode(Stu* link,char *name,char *sex,int number,int score)
{
Stu* p = link;
Stu* student=(Stu*)malloc(sizeof(Stu));//devc++ 必须要开辟空间,不然会报错
int i=0,j=0;
student->stuname=name;//不开辟空间 会在这里报错
student->sex=sex;
student->stunumber=number;
// printf("%d %d", student->stunumber,number);调试
student->stuscore=score;
student->next = NULL;
while(p->next!=NULL)
{
p=p->next;
}
p->next = student;
}
void SaveStuNode(Stu* link)
{
Stu *p=link;
FILE *fp=NULL;//初始化文件指针变量
fp=fopen("test.text","w");//test.text是文件名,a+是模式
if(fp==NULL)
{
printf("文件打开失败");
return;
}
//fprintf(fp,"姓名\t性别\t学号\t\t成绩\n");
while(p->next!=NULL)
{
p=p->next;
fprintf(fp,"%s %s %d %d\n",&p->stuname,&p->sex,p->stunumber,p->stuscore);
}
printf("保存成功\r\n");
fclose(fp);
}
//查询学生信息
void SelectStuNode(Stu* link,int id)
{
Stu* p=link;
while(p->next!=NULL)
{
p=p->next;
if(p->stunumber = id)
{
printf("你查询学生信息\r\n");
printf("姓名\t性别\t学号\t\t成绩\r\n");
printf("%s\t%s\t%d\t%d\r\n",&p->stuname,&p->sex,p->stunumber,p->stuscore);
return ;
}
}
printf("没有此学生信息\r\n");
}
//打印学生信息
void DisplayStuNode(Stu* link)
{
Stu* p= link;
printf("姓名\t性别\t学号\t\t成绩\r\n");
while(p->next !=NULL)
{
p=p->next;
printf("%s\t%s\t%d\t%d\r\n",&p->stuname,&p->sex,p->stunumber,p->stuscore);
}
}
//读取文件
void ReadStuNode(Stu* link,char *filename)
{
char *name;
char *SEX;
int number;
int score;
Stu* p= link;
FILE *fp=NULL;//初始化文件指针变量
fp=fopen("test.text","r");//test.text是文件名,r是模式
if(fp==NULL)
{
printf("文件打开失败");
return ;
}
while(!feof(fp))
{
fscanf(fp,"%s %s %d %d\n",&name,&SEX,&number,&score);
// printf("%s %s %d %d\r\n",&name,&SEX,number,score);
AppendStuNode(p,name,SEX,number,score);
//DisplayStuNode(p);
}
fclose(fp);
printf("读取成功\r\n");
}
//统计学生个数
void CountStuNode(Stu *link)
{
Stu* p=link;
int cnt=0;
while(p->next!=NULL)
{
p=p->next;
cnt++;
}
printf("高校总人数为:%d\r\n",cnt);
}
//修改学生信息
void AlterStuNode(Stu* link,int id)
{
Stu* p=link;
while(p->next!=NULL)
{
p=p->next;
if(p->stunumber = id)
{
printf("请修改学生信息\r\n");
printf("姓名\t年龄\t学号\t\t成绩\r\n");
scanf("%s %s %d %d",&p->stuname,&p->sex,&p->stunumber,&p->stuscore);
printf("修改成功");
return;
}
}
printf("没有此学号");
}
//删除学生信息
void DeleteStuNode(Stu* link,int id)
{
Stu* p=link;
Stu* a;
int cnt=0;
while(p->next!=NULL)
{
if(p->next->stunumber = id) //判断下一个节点是否是删除的节点
{
p->next = p->next->next;// 删除节点指向 删除节点的下一节点
printf("删除成功\n");
return;
}
p=p->next; //下一个节点
}
printf("没有此学号");
}
void menu(void)
{
printf("---------欢迎使用高校学生管理系统————————\r\n");
printf("********1.录入学生信息************\r\n");
printf("********2.打印学生信息************\r\n");
printf("********3.保存学生信息************\r\n");
printf("********4.读取学生信息************\r\n");
printf("********5.查询学生信息************\r\n");
printf("********6.统计学生信息************\r\n");
printf("********7.修改学生信息************\r\n");
printf("********8.删除学生信息************\r\n");
printf("********0.退出系统****************\r\n");
printf("请输入序号选择功能:");
}
int main(void)
{
int input=0;
char *name;
char *SEX;
int number;
int score=0;
Stu *Student = creatNode();
char *filename = "test.text";
int id;
int num;
char a;
ReadStuNode(Student,filename);//读取信息
while(1)
{
menu();
input=0;
scanf("%d",&input);
switch(input)
{
//1.录入学生信息
case 1:
printf("请输入学生信息(姓名、性别、学号、成绩):");
scanf("%s %s %d %d",&name,&SEX,&number,&score);
printf("%s\t%s\t%d\t%d\r\n",&name,&SEX,number,score);
AppendStuNode(Student,name,SEX,number,score);
printf("添加成功\r\n");
//DisplayStuNode(Student);
break;
case 2:
//2.打印学生信息
DisplayStuNode(Student);
break;
case 3:
//3.保存学生信息
SaveStuNode(Student);
break;
case 4:
//4.读取学生信息
ReadStuNode(Student,filename);
break;
case 5:
//查询学生信息
printf("请输入你要查询学生的学号:");
scanf("%d",&id);
SelectStuNode(Student,id);
break;
case 6:
//6.统计学生信息
CountStuNode(Student);
break;
case 7:
//7.修改学生信息
printf("请输入你要修改学生的学号:");
scanf("%d",&id);
AlterStuNode(Student,id);
break;
case 8:
printf("请输入你要删除学生学号:");
scanf("%d",&id);
DeleteStuNode(Student,id);
break;
case 0:
printf("是否保存到文件Y/N:");
scanf("%s",&a);
if(a=='Y' || a=='y')
{
SaveStuNode(Student);
}
exit(0);
break;
default:
break;
}
}
return 0;
}