|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
只有根据学号排序那个地方进行不下去,已经附加红字
#include<stdio.h>
#include<malloc.h> //程序中用到了malloc()函数
#include<string.h> //程序中用到了strcpy()函数
#include<stdlib.h> //程序中用到了exit()、system()函数
#include<conio.h> //程序中用到了getch()函数
typedef struct Lnode{
char number[10]; //定义学号
char name[9]; //定义姓名
char sex[3]; //定义性别
int age; //定义年龄
int score; //定义成绩
struct Lnode *next;
}Lnode;
void menu()
{
printf("\n\n\t**********************学生信息管理系统*******************\n");
printf("\n\t\t\t1.创建学生信息表\n");
printf("\n\t\t\t2.按学号排序\n");
printf("\n\t\t\t3.插入新同学\n");
printf("\n\t\t\t4.删除退学同学\n");
printf("\n\t\t\t5.打印学生信息表\n");
printf("\n\t\t\t6.退出系统\n");
printf("\n\t************学号:G12060101**********姓名:张三************\n"); //这里改成您的学号、姓名
printf("\n\t请输入您的选择:");
}
int biaochang(Lnode *L)
{
int i=0;
Lnode *p;
p=L;
do
{
p=p->next;
i++;
}while(p->next!=NULL);
return i;
}
Lnode* chuangjian(Lnode *L,int n) //采用尾插法创建单链表
{
Lnode *s,*r;
int i;
char no[10],xingming[9],xingbie[3];
int nianling,chengji;
L=(Lnode *)malloc(sizeof(Lnode));
L->next=NULL;
r=L;
printf("\n请输入学生的各项信息(学号 姓名 性别 年龄 成绩):\n");
for(i=1;i<=n;i++)
{
s=(Lnode *)malloc(sizeof(Lnode));
scanf("%s %s %s %d %d",no,xingming,xingbie,&nianling,&chengji);
strcpy(s->number,no);
strcpy(s->name,xingming);
strcpy(s->sex,xingbie);
s->age=nianling;
s->score=chengji;
s->next=r->next;
r->next=s;
r=s;
}
return L;
}
Lnode* paixu(Lnode *L) //根据学号排序
{
int i=1,d,e,f;
Lnode *a,*b,*c;
f=biaochang(L);
for(e=1;e<f;e++)
{
a=L;
b=L->next;
c=b->next;
for(;;)
{
if(c->next==NULL||b->next==NULL) break;
if(b->number>c->number&&i==1)
{
a->next=c;
b->next=c->next;
c->next=b;
i=0;
}
else if(c->number>b->number&&i==0)
{
a->next=b;
c->next=b->next;
b->next=c;
i=1;
}
a=a->next;
b=b->next;
c=c->next;
}
}
return L;
}
Lnode* insert(Lnode *L,int i,char no[10],char xingming[9],char xingbie[3],int nianling,int chengji)
//在单链表的第i个位置插入新学生信息
{
Lnode *a,*b;
int q;
a=(Lnode *)malloc(sizeof(Lnode));
strcpy(a->number,no);
strcpy(a->name,xingming);
strcpy(a->sex,xingbie);
a->age=nianling;
a->score=chengji;
b=L;
for(q=1;q<i;q++)
b=b->next;
a->next=b->next;
b->next=a;
return L;
}
Lnode* shanchu(Lnode *L,int i) //删除单链表中第i个位置上的学生信息
{
int c;
Lnode *s,*r;
r=L;
s=L->next;
for(c=1;c<i;c++)
{
r=r->next;
s=s->next;
}
r->next=s->next;
free(s);
return L;
}
void dayin(Lnode *L) //打印单链表
{
Lnode *p;
printf("\n学号\t\t姓名\t性别\t年龄\t成绩\n");
printf("-------------------------------------------------\n");
p=L->next;
while(p!=NULL)
{
printf("%s\t%s\t%s\t%d\t%d\n",p->number,p->name,p->sex,p->age,p->score);
p=p->next;
}
}
void tuichu()
{
printf("下次再见,88!");
exit(0);
}
main()
{
Lnode *L=NULL,*t;
int xuanze;
int count;
int pos2;
char xh[10],nm[9],xb[3];
int ag,cj;
int pos3;
while(1)
{
menu();
scanf("%d",&xuanze);
switch(xuanze)
{
case 1:
{
printf("\n请问您要输入的学生人数:");
scanf("%d",&count);
t=chuangjian(L,count);
dayin(t);
break;
}
case 2: paixu(L); break;
case 3:
{
printf("请输入要插入的位置(1-%d): ",count);
scanf("%d",&pos2);
printf("请输入新学生信息(信息用空格分开): \n");
scanf("%s %s %s %d %d",xh,nm,xb,&ag,&cj);
t=insert(t,pos2,xh,nm,xb,ag,cj);
count++;
printf("插入后的单链表为:\n");
dayin(t);
break;
}
case 4:
{
printf("请输入要删除的位置(1-%d): ",count);
scanf("%d",&pos3);
t=shanchu(t,pos3);
count--;
printf("删除后的单链表为:\n");
dayin(t);
break;
}
case 5: dayin(t); break;
case 6: tuichu(); break;
}
printf("\n");
printf("输入任意键继续......\n");
getch();
system("cls"); //清屏
printf("单链表中的元素分别为:\n");
dayin(t);
printf("\n\n");
}
}
|
|