C語言中的貨
A. 用c語言編寫一個倉庫貨物管理系統的程序
個人覺得,題主的題的難度不亞於一個C語言的課程設計哈,在這提問不太合適。
就提供給你思路吧。
職工信息可以存入一個結構體數組中,此結構體元素包含有貨物編號(unsigned int cargo_number;);貨物名稱(char cargo_name[10];);貨物價格(unsigned int cargo_price;);貨物數量(unsigned int cargo_price;)。。。其他元素,題主根據要求添加元素。
然後,構建函數用來添加貨物名稱:void add_cargo_info(...)(形參元素為結構體數組名),即手動添加貨物信息,完事後記得要將信息寫入磁碟文件中;
然後,構建函數顯示信息,這個簡單,void display_cargo_info(...)(形參為結構體數組名),用一個while循環輸出即可;
然後,查詢函數,void cargo_info_search(...)(形參可為多種,名字,編號。。。),同樣用while循環搞定;
然後,修改信息,void cargo_info_update(...)(形參同為結構體數組),調用查找函數,找到要修改的貨物,然後在此信息中修改即可;
然後,刪除信息,void cargo_info_delete(...)(形參同為結構體數組),也是首先找到要刪除的信息,然後要調用保存函數。
這個就是我的思路,題主可以參考,希望解決了題主的問題。
B. c語言程序設計 用鏈表編寫商品庫存管理。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct node{
char no[20];//存放編號
char name[40];//存放名稱
int reserve;//庫存
struct node *next;
}NODE;
typedef struct link{
NODE *front;//頭指針
NODE *rear;//尾指針
}LINK;
NODE *create_node(void){
NODE *node = (NODE *)malloc(sizeof(NODE));
printf("請輸入貨物編號:");
gets(node->no);
printf("請輸入貨物名稱:");
gets(node->name);
printf("請輸入貨物名稱:");
char ch;
while( (ch= getchar()) != '\n');//rewind(stdin);
scanf("%d",&node->reserve);
node->next = NULL;
return node;
}
void init_link(LINK *link){
link->rear = NULL;
link->front = NULL;
}
int link_empty(LINK *link){
return link->front == NULL ? 1: 0;
}
int node_num(LINK *link){
int num = 0;
if( link_empty(link)){
return num;
}
num = 1;
NODE *node = link->front;
while(node != link->rear){
node = node->next;
++num;
}
return num;
}
/*NODE *node_find(LINK *link,const int n){
int num = node_num(link);
if(num < n){
printf("公有節點%d個,無法找到第%d個節點\n",num,n);
}
else{
}
}
*/
void node_push(LINK *link){
NODE *node = create_node();
if(link->front == NULL){
link->front = node;
link->rear = node;
node->next = NULL;
}
else{
link->rear->next = node;
link->rear = node;
node->next = NULL;
}
}
void node_insert(LINK *link,const int n){
int num = 0,i = 1;
NODE *node = link->front;
NODE *new_node = NULL;
if ( link_empty(link) ){
printf("鏈表為空,將建立鏈表!\n");
node_push(link);
}
else{
if( n <= 1){
printf("在鏈表頭插入數據\n");
new_node = create_node();
new_node->next = link->front;
link->front = new_node;
}
else if( n>= num = node_num(link) ){
printf("節點數少於%d,將在末尾插入節點.\n",n);
node_push(link);
}
else{
printf("在第n個節點後插入數據\n");
if(num >= n){
while( i != n){
node = node->next;
++i;
}
new_node = create_node();
new_node-next = node->next;
node->next = new_node;
}
}
}
void find_node_insert(LIKNK *link,const char *name){
NODE *node = link->front;
if( link_empty(link) )
node_push(link);
else {
while(strcmp(node->name,name) != 0){
if(node != link->rear)
node = node->next;
else break;
}
if(node != NULL){
NODE *new_node = create_node();
new_node-next = node->next;
node->next = new_node;
}
else {
printf("沒有找到相關貨物,將在頭節點插入數據\n");
intsert(link,0);
}
}
/*由於我不知到你對貨物統計具體實現的要求,關於貨物數量統計就你自己寫了,應該比較簡單。*/
/* 代碼沒有具體運行過,如果你學過C結構體與指針,就這個代碼思路應該看得明白,真正的實現你自己實現吧
這樣對你會更好寫。可能會有錯誤的地方,請謹慎。 */
C. C語言編程:貨物管理系統
可以提供一個很類似的:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#defineN100
structhardware
{
intID;
charname[35];
intnum;
floatprice;
}output={0,"empty",0,0};
intmain()
{
voidinit(hardware*output);
voiddelect(void);
voidfoutput(void);
voidrenew(void);
inti=0,select;//記錄靜態鏈表的長度
do
{
printf("************************** ");
printf("*請輸入您要執行的操作:* ");
printf("*0------>創建商品文件* ");
printf("*1------>更新商品信息* ");
printf("*2------>列印商品文件* ");
printf("*3------>刪除商品信息* ");
printf("*4------>確定退出程序* ");
printf("************************** ");
printf("請輸入您的選擇:");
scanf("%d",&select);
if(select==4)
{
return0;
}
elseif(i==0&&select!=0)
{
printf("商品文件尚未建立,不能進行該操作! ");
select=5;
}
switch(select)
{
case0:init(&output);printf("文件commodity.dat已創建完成! ");i++;break;
case1:renew();printf("指定的信息已經更新完成. ");break;
case2:foutput();printf("指定的文件commodity.dat已經列印完成. ");break;
case3:delect();printf("庫存為零的商品已經刪除完成. ");break;
case4:break;
default:printf("輸入有誤!請重新輸入. ");
}
}while(select!=4);
return0;
}
voidrenew(void)
{
FILE*pf;
hardware*tem;
inti=0,j,num,ID;
if((tem=(hardware*)malloc(sizeof(hardware)))==NULL)
{
printf("memoryerror! ");
exit(0);
}
printf("請輸入您要您要更新的商品條數: ");
scanf("%d",&num);
while(i<num)
{
z:printf("請輸入需要更新的商品號: ");
scanf("%d",&ID);
if(ID>N||ID<1)
{
printf("輸入的商品號有誤,請重新輸入! ");
gotoz;
}
if((pf=fopen("D:\commodity.dat","rb+"))==NULL)
{
printf("openfileerror! ");
exit(0);
}
for(j=0;j<N;j++)//讀出數據
{
if(!fread(tem,sizeof(hardware),1,pf))
{
printf("outputerror! ");
}
if(tem->ID==ID)
{
printf("記錄號:%d 工具名%s 數量%d 價格%.3f ",tem->ID,tem->name,tem->num,tem->price);
printf(" 請輸入新的商品信息: ");
printf("請輸入需要更新的第%d件的工具名: ",i+1);
scanf("%s",tem->name);
printf("請輸入需要更新的第%d件商品數量和價格(以空格隔開): ",i+1);
scanf("%d%f",&tem->num,&tem->price);
fseek(pf,-1L*sizeof(hardware),1);
if(!fwrite(tem,sizeof(hardware),1,pf))
{
printf("inputerror! ");
}
printf("第%d個商品數據更新成功! ",i+1);
break;
}//if
}//for
fclose(pf);
i++;
}//while
free(tem);
}
voidfoutput(void)
{
FILE*pf;
hardwaretem;
inti;
if((pf=fopen("D:\commodity.dat","rb"))==NULL)
{
printf("openfileerror! ");
exit(0);
}
printf(" *********列印列表如下:********* ");
for(i=0;i<N;i++)//讀出數據
{
if(!fread(&tem,sizeof(hardware),1,pf))
{
printf("outputerror! ");
}
if(strcmp(tem.name,"empty"))//
{
printf("記錄號:%d 工具名%s 數量%d 價格%.3f ",tem.ID,tem.name,tem.num,tem.price);
}
}
fclose(pf);
}
voiddelect(void)
{
FILE*pf;
hardware*tem;
inti;
if((tem=(hardware*)malloc(sizeof(hardware)))==NULL)
{
printf("memoryerror! ");
exit(0);
}
if((pf=fopen("D:\commodity.dat","rb+"))==NULL)
{
printf("openfileerror! ");
exit(0);
}
for(i=0;i<N;i++)//讀出數據
{
fseek(pf,0,1);
if(!fread(tem,sizeof(hardware),1,pf))
{
printf("outputerror! ");
}
if(tem->num==0)
{
strcpy(tem->name,"empty");//
tem->price=0;
fseek(pf,-1L*sizeof(hardware),1);
if(!fwrite(tem,sizeof(hardware),1,pf))
{
printf("inputerror! ");
}
}//if
}//for
fclose(pf);
free(tem);
}
voidinit(hardware*output)
{
FILE*pf;
inti;
if((pf=fopen("D:\commodity.dat","wb"))==NULL)
{
printf("openfileerror! ");
exit(0);
}
for(i=0;i<N;i++)//初始化100個元素
{
output->ID=i+1;
if(!fwrite(output,sizeof(hardware),1,pf))
{
printf("inputerror! ");
}
}
fclose(pf);//關閉文件,完成初始化的所有操作
}