求帮助,编译成功,但运行打印时一闪而过
题目和程序都在这里了,求大神帮帮忙。实验名称:职工信息管理
实验要求:设有一个职工文件,其结构为:职工号(no)、姓名(name)、部门号(depno)、工资数(salary)、职工号指针(pno)、部门号指针(pdepno)和工资数指针(psalary)。设计一个程序,从职工文件中读取记录到一个单链表中,并完成如下功能:
(1)输入:添加一个职工记录。
(2)输出:输出全部职工记录。
(3)按no排序:通过pno指针将职工记录按no从小到大链接起来。
(4)按no输出:沿pno链输出全部职工记录。
(5)按depno排序:通过pdepno指针将职工记录按depno从小到大链接起来。
(6)按depno输出:沿pdepno链输出全部职工记录。
(7)按salary排序:通过psalary指针将职工记录按salary从小到大链接起来。
(8)按salary输出:沿psalsry链输出全部职工记录。
(9)全清:删除职工文件中有全部记录。
(10)存储退出:将单链表中的全部结点存储到职工文件中,然后退出程序运行过程。
#ifndef_H_LETTER_H_A
#define_H_LETTER_H_A
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#define ASK(p) do{\
p=(ADDR*)malloc(sizeof(ADDR));\
if(p==NULL) {printf("memory fail");exit(-1);}\
}while(0)
#define LEN sizeof(ADDR)
extern int count; /*全局记数*/
typedef struct node{
char name[18];
char no[20];
char depno[5];
char salary[10];
struct node *next;
}ADDR;
ADDR *input(ADDR *); /*输入数据*/
void display(ADDR *);/*显示数据*/
int menu_select(void);/*菜单选择*/
void handle_menu(ADDR *);/*菜单处理*/
ADDR *del(ADDR *); /*删除数据*/
ADDR *paixu(ADDR *);
#endif
int count; /* 声明全局记录计数变量*/
void main( )
{
ADDR *top, *star;
ASK(top);
ASK(star);
top->next=NULL;
count=0; /*全局变量*/
printf("\n");
printf("\t***********************\n");
printf("\t zhe shi yi ge \n");
printf("\t jian dan de \n");
printf("\t zhi gong xin xi guan li \n");
printf("\t huan ying shi yong y\n");
printf("\t***********************\n");
printf("\n");
handle_menu(top);
getch();
}
/*菜单处理函数 */
void handle_menu(ADDR *top)
{
for(;;){
switch( menu_select())
{
case 1:top=input(top);
break;
case 2:display(top);
break;
case 3:top=del(top);
break;
case 4:
printf("退出操作,再见!\n");
exit(0);
case 5: top=paixu(top);
break;
}
}
}
/*菜单选择函数 menu_selected*/
int menu_select()
{ char s[2];
int cn=0;
printf("\n");
printf("1. shu ru shu ju,xin jian ji lu\n"); /*输入记录,新建数据*/
printf("2. xian shi ji lu \n"); /* 显示记录*/
printf("3. shan chu ji lu \n"); /* 删除记录*/
printf("4. jie shu yun xing \n"); /* 结束运行 */
printf("5. xuan ze pai xu fang shi,pai xu hou shu chu" );
printf("6. zuo bian shu zi dui ying gong neng xuan ze 1-5: \n"); /* 左边数字对应功能选择1-4:*/
for( ; ;)
{ gets(s);
cn =atoi(s);
if(cn<1||cn>7) printf("\nshu ru cuo wu ,chong xuan 1-7:");
else break;
}
return cn;
}
/* *输入信息函数*/
ADDR *input(ADDR *top)
{ ADDR *old;
ADDR *star;
ASK(star);
old=top;
while(old->next!=NULL)
{
old=old->next;
}
printf("shu ru shu ju ,yi 0 jie shu \n"); /*输入数据,以0结束*/
--count;
do
{
++count;/*全局变量加一*/
printf("xing ming :");
gets(star->name);
gets(star->name); /*输入姓名*/
if(strcmp(star->name,"0")==0) /*遇到\0结束*/
break;
printf("zhi gong hao:"); /*职工号*/
gets(star->no);
gets(star->no);
printf("bu men hao:"); /*部门号*/
gets(star->depno);
gets(star->depno);
printf("gong zi shu :"); /*工资数*/
gets(star->salary);
gets(star->salary);
if(count==0) top=star; /*如果为空,则八输入的数据保存早top中*/
old->next=star;
old=star;
ASK(star);
}while(star->name[0]!='0');
old->next=NULL;
free(star);
return(top);
}
/*显示内存动态记录数据*/
void display(ADDR *top)
{
ADDR *p;
if(count==0)
{
printf("xain zai mei you ji lu");/*现在没有记录*/
return;
}
p=top;
printf("\nxian zai you ru xia %dtiao ji lu:\n",count); /*\n现在有如下%d条记录:\n*/
printf("xing ming\tzhi gong hao\tbu men hao \tgong zi\n"); /*姓名\t职工号\t部门号\t工资*/
while(p!=NULL)
{
printf("%s\t%s\t%s\t%s\n",p->name,p->no,p->depno,p->salary);
p=p->next;
}
}
ADDR *del(ADDR *top)
{
char choose[5],input[30];
int cn=0;
ADDR *pname,*pno;
if(count==0)
{
printf("kong biao,tui chu cao zuo !"); /*记录已成空表,退出删除操作!*/
return top;
}
printf("ke yi tong guo yi xia liang zhong fang fa shan chu \n"); /*可以通过以下两种方法删除*/
printf("1.tong guo xing ming \n"); /*通过姓名*/
printf("2.tong guo zhi gong hao \n"); /*通过职工号*/
gets(choose);
while(1)
{
cn=atoi(choose);
if(cn!=1&&cn!=2)
{ printf("shu ru you cuo,qing chong shu ru1-2: \n"); /*输入有错,请重新输入1-2: */
gets(choose);
}
else
break;
}
switch(cn)
{
case 1: printf("shu ru xing ming \n"); /*输入姓名 */
break;
case 2: printf("shu ru zhi gong hao \n"); /*输入职工号*/
}
gets(input);
pname=pno=top;
while(pno!=NULL)
{
if((cn==1&&strcmp(input,pno->name)==0)
||(cn==2&&strcmp(input,pno->no)==0))
{
if(pno==top)
top=pno->next;
else
pname->next=pno->next;
free(pno);
--count;
printf("deleted it");/*给出删除成功的信息*/
if(count==0)
{
ASK(top);
ASK(pno);
top->next=NULL;
}
return top;
}
else
{
pname=pno;
pno=pno->next;
}
}
printf("没有找到相应记录");
return top;
}
/*排序,并输出排序后的内容*/
ADDR *paixu(ADDR *top)
{ ADDR *p;
ADDR *q,*t;
int i,j;
char ch;
p=top; /*用冒泡排序来排序*/
t=chuandi(p);
for(i=0;i<count-1;i++)
for(j=0;j<count-i;j++)
if(strcmp(t,t->next)>0) /*t>t->next*/
{ q=p;
p=p->next;
p->next=q;
t=t->next;
}
display(p);
}
chuandi (ADDR *top)
{ ADDR *t;
char ch;
printf("qing shu ru pai xu fang shi");
scanf("%c",&ch);
if(ch=="no") t=top->no;
else
if(ch=="depno") t=top->depno;
else
if(ch=="salary") t=top->salary;
else
printf("shu ru cuo wu ,qing chong xin shu ru ");
return(t) ;
}