语言课程设计之产品信息管理.docx

上传人:b****3 文档编号:27241653 上传时间:2023-06-28 格式:DOCX 页数:12 大小:40.53KB
下载 相关 举报
语言课程设计之产品信息管理.docx_第1页
第1页 / 共12页
语言课程设计之产品信息管理.docx_第2页
第2页 / 共12页
语言课程设计之产品信息管理.docx_第3页
第3页 / 共12页
语言课程设计之产品信息管理.docx_第4页
第4页 / 共12页
语言课程设计之产品信息管理.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

语言课程设计之产品信息管理.docx

《语言课程设计之产品信息管理.docx》由会员分享,可在线阅读,更多相关《语言课程设计之产品信息管理.docx(12页珍藏版)》请在冰豆网上搜索。

语言课程设计之产品信息管理.docx

语言课程设计之产品信息管理

#include"stdio.h"  /*I/O函数*/

#include"stdlib.h" /*其它说明*/

#include"string.h" /*字符串函数*/

#include"conio.h" /*屏幕操作函数*/

#include"mem.h" /*内存操作函数*/

#include"ctype.h" /*字符操作函数*/

#include"alloc.h" /*动态地址分配函数*/

#define N3    /*定义常数*/

typedefstructz1 /*定义数据结构*/

{charno[5];

  charname[6];

  chartypeno[6];

  charkind[8];

  charunit[4];

  charamount[6];

  charprice[5];

  charvalday[10];

  chardata[10];

  structz1*next;

 }product;/*以下是函数原型*/

product *init();    /*初始化函数*/

product*create(); /*创建链表*/

product*delete(product*h); /*删除记录*/

voidprint(product*h); /*显示所有记录*/

voidsearch(product*h);  /*查找*/

voidsave(product*h);   /*保存*/

product*load();      /*读入记录*/

product*insert(product*h); /*插入记录*/

voidappend();          /*追加记录*/

product*sort(product*h);  /*排序*/

product*index(product*h); /*索引*/

voidtotal(product*h);     /*分类合计*/

intmenu_select(); /*菜单函数*/

/******主函数开始*******/

main()

{inti;

 product*head;   /*链表定义头指针*/

  head=init();        /*初始化链表*/

  clrscr();          /*清屏*/

  for(;;)           /*无限循环*/

  {switch(menu_select())   /*调用主菜单函数,返回值整数作开关条件*/

    {     /*值不同,执行的函数不同,break不能省略*/

 case0:

head=init();break; /*执行初始化*/

 case1:

head=create();break;/*创建链表*/

 case2:

save(head);break;/*删除记录*/

 case3:

head=delete(head);break; /*显示全部记录*/

 case4:

search(head);break; /*查找记录*/

 case5:

print(head);break; /*保存文件*/

 case6:

head=index(head);break; /*读文件*/

 case7:

head=sort(head); break;/*插入记录*/

 case8:

head=insert(head);break; /*排序*/

 case9:

append();break;   /*追加记录*/

 case10:

head=load();break; /*索引*/

 case11:

exit(0);     /*如菜单返回值为12程序结束*/

    }

  }

}/*菜单函数,返回值为整数*/

menu_select()

{char*menu[]={"***************MENU***************", /*定义菜单字符串数*/

  "0.initlist",  /*初始化*/

  "1.Enterlist", /*输入记录*/

  "2.Savethefile", /*从表中删除记录*/

  "3.Deletearecordfromlist",     /*显示单链表中所有记录*/

  "4.Searchrecordonname", /*按照姓名查找记录*/

  "5.printlist",        /*将单链表中记录保存到文件中*/

  "6.outvaldayproduct",      /*从文件中读入记录*/

  "7.sortonprice", /*插入记录到表中*/

  "8.insertrecordtolist", /*排序*/

  "9.append recordtofile", /*追加记录到文件中*/

  "10.Loadthefile",     /*索引*/

  "11.Quit"};            /*退出*/

  chars[3];     /*以字符形式保存选择号*/

  intc,i;      /*定义整形变量*/

  gotoxy(1,25);      /*移动光标*/

  printf("pressanykeyentermenu......\n"); /*压任一键进入主菜单*/

  getch();            /*输入任一键*/

  clrscr();           /*清屏幕*/

  gotoxy(1,1);           /*移动光标*/

  textcolor(YELLOW); /*设置文本显示颜色为黄色*/

  textbackground(BLUE); /*设置背景颜色为蓝色*/

  gotoxy(10,2);        /*移动光标*/

  putch(0xc9);      /*输出左上角边框┏*/

  for(i=1;i<52;i++)

    putch(0xcd);  /*输出上边框水平线*/

  putch(0xbb);          /*输出右上角边框 ┓*/

  for(i=3;i<17;i++)

  {gotoxy(10,i);putch(0xba); /*输出左垂直线*/

    gotoxy(62,i);putch(0xba);} /*输出右垂直线*/

  gotoxy(10,17);putch(0xc8); /*输出左上角边框┗*/

  for(i=1;i<52;i++)

    putch(0xcd);    /*输出下边框水平线*/

  putch(0xbc);            /*输出右下角边框┛*/

  window(11,3,61,16);     /*制作显示菜单的窗口,大小根据菜单条数设*/clrscr();            /*清屏*/

  for(i=0;i<13;i++)     /*输出主菜单数组*/

  {gotoxy(10,i+1);

    cprintf("%s",menu[i]);}

  textbackground(BLACK); /*设置背景颜色为黑色*/

  window(1,1,80,25);     /*恢复原窗口大小*/

  gotoxy(10,21);     /*移动光标*/

  do{printf("\n Enteryouchoice(0~11):

");  /*在菜单窗口外显示提信息*/

    scanf("%s",s);         /*输入选择项*/

    c=atoi(s);     /*将输入的字符串转化为整形数*/

  }while(c<0||c>11);  /*选择项不在0~14之间重输*/

  returnc;   /*返回选择项,主程序根据该数调用相应的函数*/

}

product*init()

{returnNULL;}/*创建链表*/

product*create()

{inti;

  product*h=NULL,*info; /*product指向结构体的指针*/

  for(;;)

  {info=(product*)malloc(sizeof(product)); /*申请空间*/

    if(!

info) /*如果指针info为空*/

    {printf("\noutofmemory"); /*输出内存溢出*/

 returnNULL;         /*返回空指针*/}

    inputs("enterno:

",info->no,5); /*输入编号并校验*/

if(info->no[0]=='@')break;  /*如果编号字符为@则结束输入*/

  inputs("entername:

",info->name,6);/*输入姓名,并进行校验*/

    inputs("entertypeno:

",info->typeno,6);

  inputs("enterkind:

",info->kind,8);

  inputs("enterunit:

",info->unit,4);

  inputs("enteramount:

",info->amount,6);

  inputs("enterprice:

",info->price,5);

  inputs("enterdata:

",info->data,10);

  inputs("entervalday:

",info->valday,10);

    info->next=h; /*将头结点做为新输入结点的后继结点*/

    h=info;  /*新输入结点为新的头结点*/

  }return(h); /*返回头指针*/}/*输入字符串,并进行长度验证*/

inputs(char*prompt,char*s,intcount)

{charp[255];

  do{printf(prompt); /*显示提示信息*/

    scanf("%s",p); /*输入字符串*/

if(strlen(p)>count)printf("\ntoolong!

\n");/*进行长度校验,超过count值重输入*/

  }while(strlen(p)>count);

  strcpy(s,p);/*将输入的字符串拷贝到字符串s中*/

}/*输出链表中结点信息*/

voidprint(product*h)

{inti=0;   /*统计记录条数*/

  product*p; /*移动指针*/

  clrscr();   /*清屏*/

  p=h;    /*初值为头指针*/

  printf("\n\n\n******************************product************************************\n");

  printf("|rec|nO|name|typeno| kind |unit|amount|price| data | valday |\n");

  printf("|---|----|------|------|--------|----|------|-----|----------|----------|\n");

  while(p!

=NULL)

  {i++;

     printf("|%3d|%-4s|%-6s|%-6s|%-8s|%-4s|%6s|%5s|%10s|%10s|\n",i,p->no,p->name,p->typeno,p->kind,

     p->unit,p->amount,p->price,p->data,p->valday);

     p=p->next;}

  printf("***********************************end***********************************\n");}

/*删除记录*/

product*delete(product*h)

{product*p,*q; /*p为查找到要删除的结点指针,q为其前驱指针*/

  chars[11];   /*存放学号*/

  clrscr();     /*清屏*/

  printf("pleasedeletedno\n");    /*显示提示信息*/

  scanf("%s",s); /*输入要删除记录的学号*/

  q=p=h;  /*给q和p赋初值头指针*/

  while(strcmp(p->no,s)&&p!

=NULL) /*当记录的学号不是要找的,或指针不为空时*/

  {q=p;     /*将p指针值赋给q作为p的前驱指针*/

    p=p->next;    /*将p指针指向下一条记录*/

  }if(p==NULL)   /*如果p为空,说明链表中没有该结点*/

    printf("\nlistno%sproduct\n",s);

  else     /*p不为空,显示找到的记录信息*/

  {printf("******************************havefound*****************************\n");

    printf("|nO|name|typeno| kind |unit|amount|price| data | valday |\n");

    printf("|----|------|------|--------|----|------|-----|----------|----------|\n");

    printf("|%-4s|%-6s|%-6s|%-8s|%-4s|%6s|%5s|%10s|%10s|\n",p->no,p->name,p->typeno,p->kind,

    p->unit,p->amount,p->price,p->data,p->valday);

    printf("*********************************end********************************\n");

    getch();    /*压任一键后,开始删除*/

    if(p==h)  /*如果p==h,说明被删结点是头结点*/

 h=p->next;   /*修改头指针指向下一条记录*/

    else

 q->next=p->next;/*不是头指针,将p的后继结点作为q的后继结点*/

    free(p);        /*释放p所指结点空间*/

    printf("\nhavedeletedNo%sproduct\n",s);

    printf("Don'tforgetsave\n");/*提示删除后不要忘记保存文件*/

  }return(h);    /*返回头指针*/

}/*查找记录*/

voidsearch(product*h)

{product*p;  /* 移动指针*/

  chars[15];  /*存放姓名的字符数组*/

  clrscr();  /*清屏幕*/

  printf("pleaseenternameforsearch\n");

  scanf("%s",s);  /*输入姓名*/

  p=h;  /*将头指针赋给p*/

  while(strcmp(p->name,s)&&p!

=NULL) /*当记录的姓名不是要找的,或指针不为空时*/

  p=p->next;   /*移动指针,指向下一结点*/

  if(p==NULL)       /*如果指针为空*/

   printf("\nlistno%sproduct\n",s); /*显示没有该学生*/

  else         /*显示找到的记录信息*/

  {printf("******************************havefound*****************************\n");

   printf("|nO|name|typeno| kind |unit|amount|price| data | valday |\n");

   printf("|----|------|------|--------|----|------|-----|----------|----------|\n");

   printf("|%-4s|%-6s|%-6s|%-8s|%-4s|%6s|%5s|%10s|%10s|\n",p->no,p->name,p->typeno,p->kind,

   p->unit,p->amount,p->price,p->data,p->valday);

   printf("*********************************end********************************\n");

  }

}/*插入记录*/

product *insert(product*h)

{product*p,*q,*info;/*p指向插入位置,q是其前驱,info指新插入记录*/

  chars[11]; /*保存插入点位置的学号*/

  ints1,i;

  printf("pleaseenterlocation beforetheno\n");

  scanf("%s",s); /*输入插入点学号*/

  printf("\npleasenewrecord\n");    /*提示输入记录信息*/

  info=(product*)malloc(sizeof(product)); /*申请空间*/

  if(!

info)

  {printf("\noutofmemory"); /*如没有申请到,内存溢出*/

    returnNULL;           /*返回空指针*/

  }inputs("enterno:

",info->no,11);/*输入学号*/

  inputs("entername:

",info->name,15);/*输入姓名*/

  info->next=NULL;   /*设后继指针为空*/

  p=h;             /*将指针赋值给p*/

  q=h;           /*将指针赋值给q*/

  while(strcmp(p->no,s)&&p!

=NULL)  /*查找插入位置*/

  {q=p;          /*保存指针p,作为下一个p的前驱*/

    p=p->next;        /*将指针p后移*/

  }if(p==NULL)    /*如果p指针为空,说明没有指定结点*/

    if(p==h)    /*同时p等于h,说明链表为空*/

 h=info; /*新记录则为头结点*/

    else

 q->next=info; /*p为空,但p不等于h,将新结点插在表尾*/

  else

    if(p==h)   /*p不为空,则找到了指定结点*/

   {info->next=p;/*如果p等于h,则新结点插入在第一个结点之前*/

 h=info;  /*新结点为新的头结点*/}

  else{

 info->next=p; /*不是头结点,则是中间某个位置,新结点的后继为p*/

 q->next=info; /*新结点作为q的后继结点*/

  }printf("\n----haveinserted%sproduct----\n",info->name); printf("---Don'tforgetsave---\n"); /*提示存盘*/

  return(h);       /*返回头指针*/

}/*保存数据到文件*/

voidsave(product*h)

{FILE*fp;       /*定义指向文件的指针*/

  product*p;  /*定义移动指针*/

  charoutfile[10]; /*保存输出文件名*/

printf("Enteroutfilename,forexamplec:

\\f1\\te.txt:

\n");/*提示文件名格式信息*/

  scanf("%s",outfile);

  if((fp=fopen(outfile,"wb"))==NULL)/*为输出打开一个二进制文件,如没有则建立*/

  { printf("cannotopenfile\n");

   exit

(1);}

  printf("\nSavingfile......\n"); /*打开文件,提示正在保存*/

  p=h;                 /*移动指针从头指针开始*/

  while(p!

=NULL)      /*如p不为空*/

  {fwrite(p,sizeof(product),1,fp);/*写入一条记录*/

    p=p->next;      /*指针后移*/

  }fclose(fp);    /*关闭文件*/

  printf("-----savesuccess!

!

-----\n"); /*显示保存成功*/

}

/*从文件读数据*/

product*load()

{product*p,*q,*h=NULL;  /*定义记录指针变量*/

  FILE*fp;          /*定义指向文件的指针*/

  chari

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 兵器核科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1