|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<windows.h>
typedef struct student //结构体
{
char name[50];
char xingbie[10];
char zhuanye[10];
char birthday[10];
char address[20];
char Escore[20];
struct student *next;
}stu;
void xinzeng(stu *head);
void shanchu(stu *head);
void daoru(stu *head);
void sousuo(stu *head);
void tongji(stu *head);
void paixu(stu *head);
void baocun(stu *head);
/////新增学生信息!/////
void xinzeng(stu *head)
{
system("cls"); //清屏!
stu *p=head;
int a;
printf("请输入你想新增几个新生信息\n");
scanf("%d",&a);
int c=0;
for(int n=0;n<a;n++)
{
stu *p1=(stu*)malloc(sizeof(stu));
c++;
printf("请输入第%d个新生的信息\n",c);
printf("请输入名字:");
scanf("%s",&p1->name);
printf("请输入性别:");
scanf("%s",&p1->xingbie);
printf("请输入专业: ");
scanf("%s",&p1->zhuanye);
printf("请输入出生日期: ");
scanf("%s",&p1->birthday);
printf("请输入地址:");
scanf("%s",&p1->address);
printf("请输入英语成绩: ");
scanf("%s",&p1->Escore);
p->next=p1;
p=p->next;
printf("添加成功!!\n");
}
p->next=NULL;
printf("\n创建完毕!\n");
getchar();
system("cls");
return; //返回主函数!
}
/////删除学生信息!///////
void shanchu(stu *head)
{
stu *p1, *p2;//定义两个指向学生结构的指针
p1=head;//把头节点赋值给p1
p2=p1->next;//把p1下一个节点赋值给p2
char name[100];
printf("请输入删除学生的名字: ");
scanf("%s",name);
while(p2!=NULL)//判断p1是否为空节点
{
while(strcmp(name,p2->name)==0)//比较删除的名字与原先的是否相同
{
p1->next=p2->next;
free(p2);//释放删除后的p2节点
printf("删除成功!\n");
return;
}
p1=p2;//从头节点进入下一个节点
p2=p2->next;//遍历
system("cls");//清屏
}
if(p2==NULL||strcmp(name,p2->name)!=0)//判断p2为空节点 没储存内容
{
printf("请先输入学生信息!!\n");
}
}
//void daoru(stu*head)
//{//尾插法
// stu *p,*p1;
// p1=(stu*)malloc(sizeof(stu));
// p1->next=NULL;
// p = head;
// printf("姓名:\n");
// scanf("%s",&p1->name);
// printf("性别:\n");
// scanf("%s",&p1->xingbie);
// printf("专业:\n");
// scanf("%s",&p1->zhuanye);
// printf("出生日期: \n");
// scanf("%s",&p1->birthday);
// printf("地址: \n");
// scanf("%s",&p1->address);
// printf("英语成绩:\n");
// scanf("%s",&p1->Escore);
// while(p->next!=NULL)
// {
// p=p->next;
// }
// p->next=p1;
// p=p1;
// printf("插入成功!\n");
//}
void daoru(stu*head)
{
//头插法
int n,i;
stu *p,*p1;
p=(stu*)malloc(sizeof(stu)); //开辟p的指针空间
p1=(stu*)malloc(sizeof(stu));//开辟p1的指针空间
p = head; //把头节点赋值给p
p1=p->next;
if(p1==NULL) //判断p1是否为空节点
{
printf("插入失败\n");
exit(1);
}
for(i=0;i<n;i++);
{
printf("姓名:\n");
scanf("%s",&p1->name);
printf("性别:\n");
scanf("%s",&p1->xingbie);
printf("专业:\n");
scanf("%s",&p1->zhuanye);
printf("出生日期: \n");
scanf("%s",&p1->birthday);
printf("地址: \n");
scanf("%s",&p1->address);
printf("英语成绩:\n");
scanf("%s",&p1->Escore);
}
p1->next=head->next;//插入p1后的位置(头插法的链表)
head->next=p1;//使链表运动下去
p1=p1->next;//进行遍历
printf("插入成功!\n");
}
///////学生信息搜索////
void sousuo(stu *head)
{
stu *p=head;
char n[20];
system("cls");
printf("请输入需查找同学的姓名\n");
scanf("%s",n);
while(p->next!=NULL)
{
if(strcmp(p->next->name,n)==0)
{
printf("名字:%s ",p->next->name);
printf("性别:%s ",p->next->xingbie);
printf("专业:%s ",p->next->zhuanye);
printf("出生日期:%s ",p->next->birthday);
printf("地址:%s ",p->next->address);
printf("英语成绩:%s\n",p->next->Escore);
return;
}
p=p->next;
if(p->next==NULL)
{
printf("没有这名学生的信息!!\n");
return;
}
}
}
void paixu(stu *head)
{
stu *p,*p1,*q;
p=head;
p1=head->next;
system("cls");
while(p->next!=NULL)
{
while(p1->next!=NULL)
{
if(p->next->Escore<p1->next->Escore)
{
q=p->next;
p->next=p1->next;
p1->next=p1->next->next;
p->next->next=q;
}
else
{
p1=p1->next;
}
}
p=p->next;
p1=p->next;
}
p=head->next;
printf("按总成绩从高到低排名如下: \n");
while(p)
{
printf("名字: %s ",p->name);
printf("性别:%s ",p->xingbie);
printf("专业: %s ",p->zhuanye);
printf("出生日期: %s ",p->birthday);
printf("地址: %s ",p->address);
printf("英语成绩: %s\n",p->Escore);
p=p->next;
}
}
void baocun(stu*head)
{
FILE *fp;//文件和目录路径名的指针fp指针指向FILE类型
fp=fopen("D:\\新生管理系统.txt","w");//文件名使用方式
stu *p=head;
p=p->next;
system("cls");
if(fp!=NULL)
{
while(p!=NULL)
{
fprintf(fp,"名字:%s ",&p->name);
fprintf(fp,"性别:%s ",&p->xingbie);
fprintf(fp,"专业:%s ",&p->zhuanye);
fprintf(fp,"出生日期:%s ",&p->birthday);
fprintf(fp,"地址:%s ",&p->address);
fprintf(fp,"英语成绩:%s\n ",&p->Escore);
p=p->next;
}
fclose(fp);
printf("已保存至D盘!\n");
}
else
{
printf("错误!!");
}
}
///////主函数!/////
int main()
{
struct student stu[100];
int s;
student *head=(student*)malloc(sizeof(student));
head->next=NULL;
system("cls");
while(1)
{
printf("\n\n\n");
printf("-------------- ** 新生管理系统 ** -----------------\n");
printf("\t 1.新增学生信息 \n");//
printf("\t 2.删除学生信息 \n");//
printf("\t 3.导入学生信息 \n");//
printf("\t 4.学生信息搜索 \n");//
printf("\t 5.学生信息统计 \n");
printf("\t 6.英语成绩排序 \n");
printf("\t 7.学生信息保存 \n");
printf("\t 8.退出 \n");
printf("--------------------请选择-----------------------\n");
fflush(stdin); //清空输入缓冲区
scanf("%d",&s);
switch(s)
{
case 1: //printf("添加学生信息!\n");
xinzeng(head);
system("pause");
break;
case 2: //printf("查看删除信息!\n");
shanchu(head);
system("pause");
break;
case 3:
daoru(head); //printf("查看导入信息\n");
system("pause");
break;
case 4:
sousuo(head); //printf("查看搜索信息!\n");
system("pause");
break;
case 5:
tongji(head); //统计学生信息!
system("pause");
break;
case 6:
paixu(head); //学生英语成绩排序!
break;
case 7:
baocun(head); //保存学生信息!
system("pause");
break;
case 8:
exit(0); //退出系统!
break ;
}
}
}
新增学生信息后,排序可正常运行,也能成功插入,但是插入信息后再次排序,新插信息不参与排序,只有新增的信息可以正常排序。(插入的文件名是daoru) |
|