| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 756 人关注过本帖
标题:求帮助,编译成功,但运行打印时一闪而过
只看楼主 加入收藏
纯真的辛辛
Rank: 1
来 自:伊师
等 级:新手上路
帖 子:1
专家分:0
注 册:2013-12-29
收藏
 问题点数:0 回复次数:0 
求帮助,编译成功,但运行打印时一闪而过
题目和程序都在这里了,求大神帮帮忙。
实验名称:职工信息管理
实验要求:设有一个职工文件,其结构为:职工号(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) ;
}
搜索更多相关主题的帖子: 记录 信息 姓名 
2013-12-29 13:09
快速回复:求帮助,编译成功,但运行打印时一闪而过
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016614 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved