C语言仓库管理系统-数据结构 第2页

C语言仓库管理系统-数据结构 第2页
操作结果:插入某货品
COM *del_perf( )
操作结果:删除某货品
serch( )
操作结果:查找某货品
print_perf( )
操作结果:输出某货品
save(COM*head)
操作结果:保存
COM *openfile( )
操作结果:载入

2. 流程框图
查找模块和载入模块的算法框图在此略。
(1)输入模块       (2)插入模块
(3)删除模块   (4)保存模块 
(5)输出模块    对以上各模块的文字解释说明:
(1)输入模块:其实就是一个建立链表的操作模块。建立链表的具体操作就是逐一输入各结点数据,并建立其前后相链的关系。首先设三个指针变量:head,ptr1,ptr2。它们都是指向结构体类型数据的。先使head的值为NULL,这是链表为空的情况。用malloc函数开辟一个结点,并使ptr1,ptr2都指向它,之后从键盘读入一个货品的数据给ptr1所指向的结点。当输入的ptr1->num不为0时,令head=ptr1;ptr2=ptr1,即把ptr1的值赋给head,使ptr2,ptr1,head都指向这一新开辟的结点,此结点就成为链表中的第一个结点。再开辟一个新结点并使ptr1指向它,读入该结点的数据,如果输入的ptr1->num不为0,则应链入这第二个结点,这时和上一个结点的处理不同,是将ptr1的值赋给ptr2->next,也就是使第一个结点的next成员指向第二个结点,接着将ptr2也指向结点2。再开辟一个新结点并使ptr1指向它,读入该结点的数据,同样将ptr1的值赋给ptr2->next,也就是使第三个结点链接到第二个结点之后,并接着将ptr1的值赋给ptr2,使ptr2指向结点3。再开辟一个新结点,并使ptr1指向它,输入该结点的数据,如果输入ptr1->num为0,则是输入结束标志,此结点不被链接到链表中,就将NULL赋给ptr2->next。建立链表过程至此结束,ptr1最后所指结点并未链入链表中。
(2)插入模块:要完成的是链表的插入操作,即将一个新结点插入到一个已有的链表中,对刚刚建立的链表,首先新设一个指针变量ptr0,并开辟一个结点使ptr3指向它,输入该结点的数据,即新货的有关数据,接下来查找要插入位置结点,找到后只需修改此结点和ptr0指向结点指针域的值即可,链表中所有元素位置均不需移动,这就体现了链表的优点。
(3)删除模块:要完成的是链表的删除操作,只需修改链表中要删除结点的前一个结点的链指针。使之指向被删除结点的后面一个结点即可。
(4)保存模块:将最终想要保留的数据信息保存于文件中。
(5)输出模块:要完成的是依次输出链表中各结点的数据的操作。首先找到链表头结点的地址,也就是head的值,然后设一个指针变量ptr1,先指向第一个结点,输出ptr1所指的结点,然后使ptr1后移一个结点,再输入直至链表的尾结点结束。
四、C源程序清单
#include<stdio.h>             /*标准输入/输出头文件*/
#include<conio.h>             /*包含绘制图形函数等头文件*/
#include<string.h>            /*包含字符串处理函数头文件*/
#include<stdlib.h>            /*包含动态存储与释放函数头文件*/
#include<graphics.h>
#define LEN sizeof(COM)
#define PRINT "% -15ld% -15s% -15d\n",ptr1->num,ptr1->name,ptr1->count
#define CHECK_COUNT ptr1->count<0
#define CHECK_COUNT2 ptr3->count<0
#define NULL 0
typedef struct com
 {long int num;
  char name[10];
  int count;
  struct com *prior, *next;
 }COM;                        /*定义结构体*/
COM *input();                   /*输入货品信息*/
COM *insert( );                  /*插入货品信息*/
COM *delet( );                  /*删除货品信息*/
void search( );                   /*查找货品信息*/
void save(COM *head);           /*保存货品信息*/
COM *openfile( );               /*从文件将货品信息载入链表*/
void print( );                    /*输出货品信息*/
FILE *fp;                      /*定义指向文件的指针变量*/
COM *head=NULL;
COM *ptr1=NULL,*ptr2=NULL;
char filename1[10];           /*定义字符数组,用来存放文件名*/
char filename2[ ]={".dat"};    /*文件扩展名.dat*/
www.751com.cn
  char string3[ ]={"count"};
  int n=1;
  if((ptr1=(COM*)malloc(LEN))==NULL)       /*申请空间函数*/
    {printf("No enough memory,fail to creat linklist!");
     getch( );                             /*无回显的从键盘读取任意一个字符*/
    }
  clrscr( );
  printf("Please input depend on the emply(goodsnumber==0 over):\n");

上一页  [1] [2] [3] [4] [5] [6] 下一页

Copyright © 2007-2012 www.chuibin.com 六维论文网 版权所有