回复 8楼 mengcan555
怎样把打印的函数和输入的函数分开啊,就是弄两个子函数,举个例子说,在主函数里边弄个switch语句,选择1的话就输入,选择2 的话就输出,
因为这个程序,还有插入和删除,这是我自己弄得,请大侠看看,问题好多额
程序的目的是输入,打印,插入,删除学生信息,我写的那个插入还有删除不能编译,高手给我调试一下,谢谢了
#include<stdio.h>
#include<stdlib.h>
#define Null 0
typedef struct LNode
{
int number;
char name[10];
double mathstore;
struct LNode *next;
}LNode,*Linklist;
typedef struct STU
{
int number;
char name[10];
double mathstore;
}STU;
Linklist createlist(int n);
void print_list(Linklist l);
void InsertList(LNode *L,struct STU t,int i);
void DeleteList(LNode *L,int i);
int n,i;
STU t;
int main()
{
int x;
Linklist l;
printf("\n\n**********************************学生信息管理系统******************************\n");
printf("选项如下:\n");
printf("1、录入学生信息:\n");
printf("2、打印学生信息:\n");
printf("3、添加新生信息:\n");
printf("4、删除学生信息:\n");
while(x!=-1)
{Linklist w;
scanf("%d",&x);
switch(x)
{
case 1:printf("请输入需要输入的学生人数:\n");
scanf("%d",&n);
createlist(n);break;
case 2:w=createlist(n);
print_list(w);break;
case 3:InsertList(l,t,i);break;
case 4:DeleteList(l,i);break;
}
printf("请继续选择输入:\n");
}
printf("输入错误!!\n");
return 0;
}
Linklist createlist(int n)
{
Linklist L,cur;
LNode *p;
char ch;
int j=0;
L=(Linklist)malloc(sizeof(LNode));
cur=(Linklist)malloc(sizeof(LNode));
L->next=NULL; //建一个空表。
cur=L; //cur初始化指向最后一个元素,尾插法
for(int i=n;i>0;i--)
{
p=(Linklist)malloc(sizeof(LNode));//生成新节点。
printf("请输入学生的学号:\n");
scanf("%d",&p->number);
printf("请输入该生的姓名:\n");
getchar();//接收上一次输入的回车符号
ch=getchar();
j=0; // j循环初始化
while(ch!='\n')
{
//scanf("%c",&p->name[j]);
p->name[j]=ch;
j++;
ch=getchar();
}
p->name[j]='\0';
printf("请输入该生的数学成绩:\n");
scanf("%lf",&p->mathstore);
p->next=NULL;
cur->next = p;
cur=p;
}
return L;
}
void print_list(Linklist l)
{
l=l->next;
printf(" 数学成绩表\n");
printf("学号\t姓名\t数学成绩\n");
while(l)
{
printf("%d,%s,%2.2lf\n",l->number,l->name,l->mathstore);
l=l->next;
}
}
void InsertList(Linklist l, STU t,int i)
{
Linklist pre,s,p;
int j;
p=l->next;
pre=l;
j=p->number;
printf("请输入需要插入的学生学号:\n");
scanf("%d",&i);
while(pre!=NULL && j<i-1 )
{pre=pre->next;
j++;
}
if((j!=i-1)||(pre==NULL))
{printf("\n no posstion Error\n");return;}
s=(Linklist)malloc(sizeof(LNode));
printf("依次输入学生的学号,姓名,数学成绩:\n");
scanf("%d%s%lf",&t.number,t.name,&t.mathstore);
s->number=t.number;
//s->name=t.name;
s->mathstore=t.mathstore;
s->next=pre->next;
pre->next=s;
}
void DeleteList(Linklist l,int i)//i为学号;
{Linklist pre,r;
int j;
j=0;
pre=l;
printf("请输入需要删除的学生学号:\n");
scanf("%d",&i);
while(pre->next!=NULL && j<i-1)
{pre=pre->next;
j++;
}
if((j!=i-1)||(pre->next=NULL) )
{printf("\nPostion Error\n");return;}
r=pre->next;
pre->next=r->next;
free(r);
}