欢迎指出不足!
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
struct student
{
int num;
char name[100];
int age;
int score;
};
struct node
{
struct student stu;
struct node *next;
};
struct node *head=NULL;
//菜单
void menu()
{
printf("==============欢迎使用高校学生成绩管理系统==============\n");
printf("\t=======请选择功能列表=======\n");
printf("\t\t1.录入学生信息\n");
printf("\t\t2.打印学生信息\n");
printf("\t\t3.保存学生信息\n");
printf("\t\t4.读取学生信息\n");
printf("\t\t5.查找学生信息\n");
printf("\t\t6.修改学生信息\n");
printf("\t\t7.删除学生信息\n");
printf("\t\t0.退出系统\n");
}
//录入学生信息
void add()
{
printf("\n请输入学生信息:学号 姓名 年龄 成绩\n");
struct node *p;
p=head;
struct node *p1=(struct node*)malloc(sizeof(struct node));//为新同学分配内存空间
if(head==NULL)
{
head=p1;
p1->next=NULL;
}
else
{
while(p->next!=NULL)
{
p=p->next;//p指向最后一个节点
}
p->next=p1;//p的下一个节点为p1
p1->next=NULL;
}
//输入数据
scanf("%d %s %d %d",&p1->stu.num,p1->stu.name,&p1->stu.age,&p1->stu.score);
printf("数据添加成功!\n");
}
//打印学生信息
void print()
{
printf("打印所有学生信息:\n");
struct node *p;
p=head;
printf("学号:\t\t姓名:\t\t年龄:\t\t成绩\n");
while(p!=NULL)
{
printf("%-16d%-16s%-16d%-16d\n",
p->stu.num,p->stu.name,p->stu.age,p->stu.score);
p=p->next;
}
}
//保存学生信息
void Save()
{
FILE *p1=fopen("1.txt","w");
if(p1==NULL)
{
printf("打开文件失败!\n");
return ;
}
//写入数据
struct node *p;
p=head;
while(p!=NULL)
{
fprintf(p1,"%d %s %d %d\n",p->stu.num,p->stu.name,p->stu.age,p->stu.score);
p=p->next;
}
printf("数据保存成功!\n");
fclose(p1);
}
//读取学员信息
void read()
{
struct node *p,*p1;
p=p1=head;
//删除链表中的数据
while(p1!=NULL)
{
p=p->next;
free(p1);
p1=p;
}
head=NULL;
//打开文件
FILE *pFile=fopen("1.txt","r");
if(pFile==NULL)
{
printf("打开失败!\n");
return;
}
else
{
while(!feof(pFile))
{
struct node *t=(struct node*)malloc(sizeof(struct node));
fscanf(pFile,"%d %s %d %d\n",&t->stu.num,t->stu.name,&t->stu.age,&t->stu.score);
//创建链表
if(head==NULL)
{
head=t;
p=head;
}
else
{
p->next=t;//p的下一个节点是t;
p=p->next;
p->next=NULL;
}
}
}
//关闭文件
fclose(pFile);
printf("读取成功!\n");
}
//查找学生信息
void search()
{
int flag=0;
printf("请输入要查找的学生的学号:\n");
int num;
scanf("%d",&num);
struct node *p;
p=head;
while(p!=NULL)
{
if(p->stu.num==num)
{
printf("学号:%d\t姓名:%s\t年龄:%d\t成绩:%d\n",
p->stu.num,p->stu.name,p->stu.age,p->stu.score);
flag++;
}
p=p->next;
}
if(flag==0)
printf("未找到!\n");
}
//修改信息
void change()
{
int flag=0;
printf("请输入要修改的学生的学号:\n");
int num;
scanf("%d",&num);
struct node *p;
p=head;
while(p!=NULL)
{
if(p->stu.num==num)
{
flag++;
printf("%d\t%s\t%d\t%d\n",p->stu.num,p->stu.name,p->stu.age,p->stu.score);
printf("是否确认修改?(Y/N)\n");
char ch=getch();
if(ch=='Y')
{
printf("请输入修改后的信息:\n");
scanf("%d %s %d %d",&p->stu.num,p->stu.name,&p->stu.age,&p->stu.score);
printf("修改成功!\n");
break;
}
else
break;
}
p=p->next;
}
if(flag==0)
printf("未找到!\n");
}
//删除信息
void Delete()
{
int flag=0;
printf("请输入要删除的学生的学号:\n");
int num;
scanf("%d",&num);
struct node *p1,*p2;
p1=head->next;//p1指向头节点的下一个
//判断是否是头节点
if(head->stu.num==num)
{
p2=head;
head=head->next;
free(p2);
printf("删除成功!\n");
return;
}
//不是头节点;
while(p1!=NULL)
{
if(p1->stu.num==num)
{
flag++;
p2=p1;
p1=p1->next;
free(p2);
printf("删除成功!\n");
return;
}
p1=p1->next;
}
if(flag==0)
printf("未找到!\n");
}
void add();
void print();
void Save();
void read();
void search();
void change();
void Delete();
//主函数
int main()
{
while(1)
{
menu();
printf("请输入选项:\n");
char ch=getch();
switch(ch)
{
case '1':
add();
break;
case '2':
print();
break;
case '3':
Save();
break;
case '4':
read();
break;
case '5':
search();
break;
case '6':
change();
break;
case '7':
Delete();
break;
case '0':
printf("\n欢迎再次使用!\n");
return 0;
break;
default:
printf("您的输入有误!\n");
break;
}
system("pause");
system("cls");
}
return 0;
}