用c语言实现超市商品管理系统,用指针实现商品的插入、删除 *** 作。

用c语言实现超市商品管理系统,用指针实现商品的插入、删除 *** 作。,第1张

可以用链表,大致就是,你创建一个结构体,结构体里有商品的一些信息,然后关键的是有个该结构体的指针,这个指针是指向下一个商品的结构体地址的,依次类推,直到最后一个商品的指针是指向null的,然后开始插入商品的思路:①创建新商品的信息②先让你要插入的结构体的指针指向要插入的那个位置后边的地址,③然后插入位置的前面的结构体指向要插入商品④如果是插在末尾,或者开头,你就注意是谁指向谁的问题。删除商品思路:直接修改要删除的商品之前的指针,绕过要删除的商品,指向下一个不擅长的商品就ok。

struct book

{

long  book_number   //记录书的编号 

char book_name[N]  //储存书的名字

double book_price  //记录书的价格

char book_author[N]//记录书的作者 

char book_state[N] //记录书的借还状态 

int  book_num      //记录书的数量 

char borrower_name[N]//记录借书人姓名

char borrower_sex[M]//记录借书人性别

long borrower_number  //记录借书人学号

struct book *book_next//指向下一个结构体

}//以前写的图书管理系统作为链表元素的结构体,只要关注最后一个指针就好了

BOOK *DelBook(BOOK *book_head) /* 此函数负责删除图书 *//*思路为连续读取文件内容,找到要删除的文件内容的位置,写入一份新的文件,再替换掉旧文件*/

{

long num//记录书籍号

int flag = 0//控制开关

char ch//记录用户的选择

BOOK *p = book_head

BOOK *pr = NULL

printf("\n功能:删除一本图书的所有信息\n")

printf("输入你要删除的书籍号")

scanf("%ld",&num)

read_book_file(book_head)//将图书信息写入节点

while(num != p->book_number && p->book_next != NULL)//查找节点并显示节点内容并且记录节点的地址

pr = p

p = p->book_next

}

if (book_head == NULL)/*数据不能正常获取*/

{

exit(0)

}

else if(num = p->book_num) /*找到了对应的*/

{

PrintBook(p)

printf("你确定要删除么?")

scanf(" %c",&ch)

if (ch == 'y'||ch == 'Y')

{

while(!flag)

{

if (book_head == NULL)

{

printf("链表为空\n")

return book_head

}

if (p == book_head)//如果是头节点要删除

{

book_head = p->book_next

free(p)//释放删除节点

flag = 1

}

else if (p->book_next == NULL)//如果是末节点

{

free(p)//释放删除的节点

p= pr //改变p的指向

p->book_next == NULL

flag = 1

}

else

{

pr->book_next = p->book_next//删除中间节点

free(p)//释放删除的节点

flag = 1

}

/*节点删除结束*//*接下来将新的内容写入文件,之前那些内容被覆盖*/

save_book_file(book_head)//调用文件写入函数重新写入

//这样直接就实现了内容的覆盖,相当于删除文本内容

return book_head//最后返回头节点

}

}

else/*未找到*/

{

fflush(stdin)

return book_head

}

}

return book_head

}

以前写的令一个管理系统的一部分,将就着看吧,插入商品和这个差不多

#include <stdio.h>

#include <conio.h>

#include <string.h>

#define SIZE 300

typedef struct

{

char name[30]

int num

char shang[10]

float price

}record

void DataInput(record *com, int *nptr)

int DataRead(record *com,int *nptr)

void DataStorage(record *com, int n) /*信息保存到文件*/

void DataFind( )

void DataDisPlay( )

void DataAdd( )

void DataDel( )

void DataStatistic( )

int main( )

{

record shangpin[SIZE]

int number=20 /*设商品数*/

char fn

printf("\t~~~~~~商品管理系统~~~~~~")

while(1)

{

printf("\n\t\t1.商品信息录入\n")/*显示主菜单*/

printf("\t\t2.商品信息显示\n")

printf("\t\t3.商品信息查找\n")

printf("\t\t4.商品信息添加\n")

printf("\t\t5.商品信息删除\n")

printf("\t\t6.商品信息统计\n")

printf("\t\t0.退出系统")

printf("\n\t~~~~~~~~~~~~~~~~\n")

printf("\t请输入你的一个选项(数字0-6): ")

fflush(stdin)

scanf("%c",&fn)

puts("\n")

switch(fn)/*切换到不同功能*/

{

case '1':

DataInput(shangpin, &number )

break /*录入信息*/

case '2':DataDisPlay()

break /*信息显示*/

case '3':

DataFind()

break /*信息查找*/

case '4':

DataAdd( )

break /*增加*/

case '5':

DataDel( )

break /*删除*/

case '6':

DataStatistic()

break /*信息统计*/

case '0':

return 0

default:puts("\t\t没有这个项!返回主菜单!")

break

}

printf("\n\t\t完毕!按任意键继续")

getch( )

puts("\n")

}

}

void DataInput(record *com, int *nptr) /*商品信息录入*/

{

int i = 0

int n /*录入的总数*/

char YesOrNo /*判断是否保存*/

char shangming[30] /*商名*/

int haoma /*商品号*/

char shangjia[10] /*单价*/

float danjia

printf("\t\t请输入商品个数:")

scanf("%d",&n)

*nptr = n /*nptr返回商品个数*/

printf("\t\t现在开始录入这%d个商品信息:\n\n",n)

while(i<n)

{

printf("请输入商品的商品名:",i+1)

scanf("%s",&shangming)

printf("请输入商品的商品号:",i+1)

scanf("%d",&haoma)

printf("请输入商品的生产商:",i+1)

scanf("%s",&shangjia)

printf("请输入商品的单价 :",i+1)

scanf("%f",&danjia)

if(danjia>=0&&danjia<=1000) /*有效的单价才录入*/

{

strcpy(com[i].name,shangming)

com[i].num = haoma

strcpy(com[i].shang,shangjia)

com[i].price = danjia

i =i+1

}

else

printf("输入的单价是一个无效的值!!!\n\n")

} /*结束while*/

printf("要保存您刚才录入的数据吗(Y/N)?") /*选择保存*/

fflush(stdin)

scanf("%c",&YesOrNo)

if(YesOrNo=='y'||YesOrNo=='Y')

DataStorage(com,n)

else if(YesOrNo=='n'||YesOrNo=='N')

return

else

printf("输入了不正确的选项\n")

return

} /*结束函数*/

void DataFind( ) /*查找*/

{

void OnNumber(record *com,int n ) /*按商品号排序*/

int key/*key为要查找的关键值*/

int low = 0 /*下限*/

int high /*上限*/

int mid /*中间值*/

char ans/*选项*/

record com[SIZE]

int n

if(DataRead(com,&n)==1) /*从文件中读取信息*/

{

OnNumber(com,n) /*先按商品号排序*/

high = n

do

{

printf("\n\n\t\t请输入你要查找的商品号:")

scanf("%d",&key)

low = 0high = n

while (low <=high)

{

mid = (high + low)/2/*折半查找法*/

if (key == com[mid].num )

{

printf("\n\t\t你要找的是第%d个商品\n",mid + 1)

printf("\t\t结果如下:\n\n")

printf("序号\t\t商品名\t商品号\t生产商\t单价\n")

printf("%3d%17s%12d%12s%8.1f\n",mid+1,com[mid].name,com[mid].num,com[mid].shang,

com[mid].price)

break/*如果找到则退出循环*/

}

if (key >com[mid].num ) low = mid + 1

else high = mid - 1

}

if (low >high)

printf("\t\t,没有找到这个价格!\n")

printf("\n\t\t还要继续查询吗(Y/N)?")

ans = getch( )

}

while (ans =='Y'||ans == 'y') /*结束do....while*/

}

}

void DataStorage(record *com, int n) /*录入保存文件*/

{

int i

FILE *comPtr

char FileName[20]

printf("请输入您要保存的文件名:")

scanf("%s",FileName)

printf("正在将商品信息保存到文件,请稍候……\n")

if((comPtr=fopen(FileName,"w"))==NULL)

printf("没有该文件\n")

else

for(i=0 i<n i++)

fprintf(comPtr,"\n%17s%12d%12s%8.1f",com[i].name,com[i].num,com[i].shang,com[i].price)

fclose(comPtr)

}

int DataRead(record *com,int *nptr) /*读取文件*/

{

int i=0

char datafile[20]

FILE *comPtr

*nptr = 0

printf("请输入文件名:")

scanf("%s",datafile)

if((comPtr = fopen(datafile,"r")) == NULL) /*打开文件*/

{

printf("没有该文件,请重新输入!\n")

return 0

}

else

{

printf("正在读取商品单价,请稍候……\n")

while (!feof(comPtr))

{

fscanf(comPtr,"%s%d%s%f",&com[i].name,&com[i].num,&com[i].shang,&com[i].price)

i++

}

*nptr = i

printf("\n")

fclose(comPtr)

return 1

}

}

void DataDisPlay()

{

void OnPrice(record *com,int n ) /*按单价*/

void OnNumber(record *com,int n ) /*按商品号*/

int N

int i

record com[300]

char YesNo /*是否按顺序显示*/

char tp

if(DataRead(com,&N)==1) /*从文件读取数据*/

{

printf("序号\t\t商品名\t商品号\t生产商\t单价\n")

for(i=0i<Ni++)

printf("%3d%17s%12d%12s%8.1f\n",i+1,com[i].name,com[i].num,com[i].shang,com[i].price)

printf("要按顺序显示吗?(Y/N)?")

fflush(stdin)

scanf("%c",&YesNo)

if(YesNo=='y'||YesNo=='Y')

{

printf("\t请输入排序方式:\n")

printf("\t(1.按价格排序从低到高;2.按商品号排序从低到高.)")

fflush(stdin)

scanf("%c",&tp)

if(tp=='1')

OnPrice(com,N)

else if(tp =='2')

OnNumber(com,N)

else

printf("\t输入了不正确项!\n")

}

}

} /*结束显示成绩*/

void OnPrice(record *com,int n ) /*按单价顺序*/

{ int i,j

record temp

printf("\t\t按单价排序---\n\n")

printf("商品总数为%d:\n",n)

for(j=0 j<n-1 j++) /*冒泡排序*/

for(i=0 i<n-j-1 i++)

if(com[i].price>com[i+1].price)

{

temp=com[i]

com[i]=com[i+1]

com[i+1]=temp

}

printf("\n\t\t按成绩排序的结果如下(按分数从低到高):\n\n")

printf("序号\t\t商品名\t商品号\t生产商\t单价\n")

for(i=0 i<n i++)

printf("%3d%17s%12d%12s%8.1f\n",i+1,com[i].name,com[i].num,com[i].shang,

com[i].price)

}

void OnNumber(record *com,int n ) /*按序号顺序*/

{

int i,j

record temp

printf("\t\t按商品号排序---\n\n")

printf("商品总数为%d:\n",n)

for(j=0 j<n-1 j++)

for(i=0 i<n-j-1 i++)

if(com[i].num>com[i+1].num)

{

temp=com[i]

com[i]=com[i+1]

com[i+1]=temp

}

printf("\n\t按商品号排序的结果如下(按商品号从小到大):\n\n")

printf("序号\t\t商品名\t商品号\t生产商\t单价\n")

for(i=0 i<n i++)

printf("%3d%17s%12d%12s%8.1f\n",i+1,com[i].name,com[i].num,com[i].shang,

com[i].price)

}

void DataAdd( ) /*增加*/

{

int i=0,n,m /*商品名称*/

char shangming[30]

int haoma/*生产商*/

char shangjia[10]

float danjia

char YesOrNo

record com[SIZE]

printf("\t\t读取原有数据信息---\n")

if(DataRead(com,&n)==1)

{

printf("\t\t信息读取完毕!\n\n")

printf("\t\t请输入要添加的商品总数:")

scanf("%d",&m)

printf("\t\t现在开始录入这%d个商品信息:\n\n",m)

while(i<m)

{

printf("第%d个商品的商品名:",i+1)

scanf("%s",&shangming)

printf("第%d个商品的商品号:",i+1)

scanf("%d",&haoma)

printf("第%d个商品的生产商:",i+1)

scanf("%s",&shangjia)

printf("第%d个商品的单价:",i+1)

scanf("%f",&danjia)

if(danjia>=0&&danjia<=1000)/*有效的单价才录入*/

{

strcpy(com[i+n].name,shangming)

com[i+n].num = haoma

strcpy(com[i+n].shang,shangjia)

com[i+n].price = danjia

i =i+1

}

else

printf("输入的单价是一个无效的值,请重新输入!\n\n")

}

printf("要保存您刚才录入的数据吗(Y/N)?")

fflush(stdin)

scanf("%c",&YesOrNo)

if(YesOrNo=='y'||YesOrNo=='Y')

DataStorage(com,n+m)

else if(YesOrNo=='n'||YesOrNo=='N')

return

else

printf("输入了不正确项,返回上一级\n")

return

}

}

void DataDel( )//删除

{

void OnNumber(record *com,int n )

record com[SIZE]

int i /*总记录数*/

int n /*要删除的记录号*/

int m

printf("\t\t读取原有数据信息---\n")

if(DataRead(com,&n)==1)

{

printf("\t\t原始数据如下:\n\n")

OnNumber(com,n )

printf("请输入你要删除的记录的序号")

scanf("%d",&m)

if(m>=1 &&m<=n)

{

for(i=m-1i<n-1i++)

com [i] = com[i+1]

DataStorage(com,n-1)

}

}

}

void DataStatistic( ) /*统计信息*/

{

int high=0,low=200,ave=0

int n,i,sum=0

int g,l

record com[SIZE]

printf("读取数据信息---\n")

if(DataRead(com,&n)==1)

{

printf("商品总数为%d\n\n",n)

for(i=0i<ni++)

{

if(com[i].price>high)

{

high = com[i].price

g=i

}

if(com[i].price<low)

{

low = com[i].price

l=i

}

sum += com[i].price

}

ave=sum/n

printf("\t\t最高\t最低\t平均\n") /*计算值*/

printf("商品单价统计:\t%d\t%d\t%d\n\n",high,low,ave)

printf("序号\t\t商品名\t商品号\t生产商\t单价\n")

for(i=0 i<n i++)

printf("%3d%17s%12d%12s%8.1f\n",i+1,com[i].name,com[i].num,com[i].shang,

com[i].price)

printf("\t\t 序号\t\t 商品名\t 商品号\t 生产商 单价\n")

printf("单价最高的商品是:%3d%17s%12d%12s%8.1f\n\n",g+1,com[g].name,com[g].num,com[g].shang,com[g].price)

printf("单价最低的商品是:%3d%17s%12d%12s%8.1f\n",l+1,com[l].name,com[l].num,com[l].shang,com[l].price)

} /*结束统计*/

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11584318.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存