c语言 商品管理系统
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言 商品管理系统相关的知识,希望对你有一定的参考价值。
C语言课程设计
题目:商店销售管理系统。
功能:屏幕上出现一个界面,让售货员输入商品编号或者商品名称,可以进货,进货后商品库存同时增加。顾客买走商品后,售货员输入商品编号或者商品名称,可以生成销售清单,统计本次销售总的价钱,同时库存数量相应减少。完成前面的基本功能后,还可以完成增加新的商品或删除不需要的商品的功能,以及每天销售统计功能等。
分步实施:
1、 初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;
2、建立一个文件,将相关的信息写入文件中并能显示于屏幕上;
3、能按商品编号进货和销售;
4、进一步要求:完成增加新的商品或删除不需要的商品的功能,以及每天销售统计功能等。
要求:1、用C语言实现程序设计;
2、利用结构体数组实现信息的数据结构设计;
3、系统的各个功能模块要求用函数的形式实现;
4、界面友好(良好的人机交互),程序加必要的注释。
对链表的读写修改操作都没问题,但是对文件的读写操作,以及把文件内的数据读入链表内实在不会!!!
如果没有时间写完全部程序也没关系,只用把对文件处理这一段注释清晰一点就可以了! 小弟在此谢过各位路过的大神!!!!
#include <conio.h>
#include <stdlib.h>
//#include"FILE.h"
typedef struct shangpin
char name[20];
int biaohao;
int shuliang;
double jiage;
Node;
typedef struct list
Node data;
struct list *next;
List ,*Slist;
void charu(Slist &s,Node x);
int caidan()
int i;
while(1)
system("cls");
printf("\n\t\t\t 商店销售管理系统\n\n");
printf("\t\t **********************************************\n\n");
printf("\t\t 1--添加商品 2--出售商品\n\n");
printf("\t\t 3--删除商品 4--显示商品\n\n");
printf("\t\t 5--查找商品 0--退出系统\n\n");
printf("\t\t **********************************************\n\n");
printf("请选择(0-5): ");
scanf("%d",&i);
if(i<6&&i>=0)break;
return i;
void chushihua(Slist &s)
Slist head=new List;
head->next=NULL;
s=head;
void tianjia(Slist &s)
Node x;
Slist r,p,q;
int i=0;
r=new List;
r->next=NULL;
q=p=s->next;
while(q)
i++;
q=q->next;
printf("请输入商品名称、数量以及价格: ");
scanf("%s%d%lf",x.name,&x.shuliang,&x.jiage);
x.biaohao=i+1;
r->data=x;
s->next=r;
r->next=p;
void duchu(Slist &s)
FILE *cp;//定义文件指针
int i=0;
Node x;
if((cp=fopen("shangpin.txt","a+"))==NULL)//打开文件
printf("文件打开失败!");return ;
fseek(cp,0L,SEEK_SET);//将文件指针移动到文件开头
while(!feof(cp))
fscanf(cp,"%s%d%lf",x.name,&x.shuliang,&x.jiage);//读取文件的内容
x.biaohao=++i;
charu(s,x);//把读到的数据插入到链表上
fclose(cp);//关闭文件
void charu(Slist &s,Node x)
Slist r,p=s->next;
r=new List;
r->next=NULL;
r->data=x;
s->next=r;
r->next=p;
void xieru(Slist s)
FILE *cp;//同上
Slist p=s->next;
if((cp=fopen("shangpin.txt","w+"))==NULL)
printf("文件打开失败!");return ;//同上
while(p)
fprintf(cp,"%s %d %.2lf ",p->data.name,p->data.shuliang,p->data.jiage);//写入文件中,并且以空格隔开
p=p->next;
fclose(cp);//关闭文件
Slist chazhao(Slist s,int m)
Slist p=s->next;
if(p==0)return 0;
if(p->next==0)return p;
if(p->data.biaohao==m)return p;
while(p->next)
if(p->next->data.biaohao==m)return p;
p=p->next;
return 0;
void xianshi(Slist s)
Slist p;
p=s->next;
printf("%10s%20s%10s%10s\n","商品编号","商品名称","商品数量","商品价格");
while(p)
printf("%10d%20s%10d%10.2f\n",p->data.biaohao,p->data.name,p->data.shuliang,p->data.jiage);
p=p->next;
void shanchu(Slist &s)
void chushou(Slist &s)
void main()
int num;
Slist s;
chushihua(s);
duchu(s);
num=caidan();
while(1)
switch(num)
case 0:exit(0);break;
case 1:tianjia(s);break;
case 2:chushou(s);break;
case 3:shanchu(s);break;
case 4:xianshi(s);break;
case 5:chazhao(s,1);break;
printf("按任意键继续!");
getch();
num=caidan();
xieru(s);
//有些函数我在没写啊,你自己写写吧,文件的读取和写入,还有链表的创建我都给你写好了,也就是上面的1,4我都写好了,
//包括了文件,剩下的2,3,5,你自己试试,并且我也给你写了一个查找函数,你看看能用不!本回答被提问者和网友采纳 参考技术B 我也在做这个题目,你现在会了吗,帮帮我,谢谢了 参考技术C 我们最近在用C#编辑进出库管理系统,应该和你的系统差不多。如果需要,给我发邮件,zycrzqsd@163.com.我们一起互相交流。
C语言实验9_结构体
C语言实验9_结构体
实验09(01)结构体
题目描述
根据实验讲义实验九中的第 1 题的内容和数据完成程序设计。设计结构体,用于存储商品的
信息,包含商品编号、商品名称、商品价格以及商品折扣信息。设计函数 input,实现商品
数据的输入。设计函数 display,实现商品信息的输出。在主函数 main 中定义 keyboard 结构
体变量,用来处理商品键盘的数据。定义一个结构体数组,用于存储 3 种电器商品的信息。
输入描述
输入商品的编号、名称、价格以及折扣信息
输出描述
输出商品的编号、名称、价格、折扣以及实际价格信息
输入样例
1010 键盘 89.50 0.85
1021 冰箱 1024.00 0.95
1022 空调 2058.50 0.90
1023 电视 3001.88 0.95
输出样例
编号:1010 名称:键盘 价格:89.50 折扣:0.85 实际价格:76.08
编号:1021 名称:冰箱 价格:1024.00 折扣:0.95 实际价格:972.80
编号:1022 名称:空调 价格:2058.50 折扣:0.90 实际价格:1852.65
编号:1023 名称:电视 价格:3001.88 折扣:0.95 实际价格:2851.79
#include <stdio.h>
#include <conio.h>
typedef struct _PRODUCR
int number;
char name[20];
double price;
double discount;
PRODUCT, *PPRODUCT;
void input(PRODUCT *p);
void input(PRODUCT *p)
scanf("%d", &p->number);
scanf("%s", p->name);
scanf("%lf", &p->price);
scanf("%lf", &p->discount);
void display(PRODUCT *p)
printf("编号:%d ", p->number);
printf("名称:%s ", p->name);
printf("价格:%.2lf ", p->price);
printf("折扣:%.2lf ", p->discount);
printf("实际价格:%.2lf\\n", p->discount * p->price);
int main() //主函数
int i;
PRODUCT kyeboard; //请定义结构体类型 PRODUCT
PRODUCT ElecDevice[3];
input(&kyeboard); //请定义函数 input
for (i = 0; i < 3; i++)
input(&ElecDevice[i]);
display(&kyeboard); //请定义函数 display
for (i = 0; i < 3; i++)
display(&ElecDevice[i]);
return 0;
实验09(02)链表
题目描述
(1)利用链表结构(PLAY_LIST),为某媒体播放器建立一个播放列表(playList),该链表的每一
个节点包括:歌曲编号(number)、歌曲名称(name)、歌手姓名(artist)。
(2)建立 4 个函数,以实现对播放列表操作。函数的原型如下:
PLAY_LIST* createList(); /*创建播放列表*/
PLAY_LIST* insertItem(PLAY_LIST* pPlayList,
PLAY_LIST* pNewPlayList);
/*在播放列表中添加一首歌曲*/
PLAY_LIST* deleteItem(PLAY_LIST* pPlayList,
int iItemNumber);
/*在播放列表中删除编号为 iItemNumber 的歌曲*/
void displayList(PLAY_LIST* pPlayList); /*显示整个播放列表中的所有信息*/
(3)在主函数中定义一个链表 playList。A)利用函数 createList 创建播放列表 playList,并在
其节点上依次存储编号为 1100、1102、1103 的 3 首歌曲,并调用 displayList 函数显示此时
整个播放列表中的所有信息。B)调用insertItem函数将编号为1101的歌曲添加到playList中,
并显示整个播放列表中的所有信息。C) 调用 deleteItem 函数将编号为 1102 的歌曲从 playList
中删除,并显示整个播放列表中的所有信息。
输入描述
输入 4 首歌曲的信息
输出描述
输出链表中所有歌曲的信息
显示列表信息时,每一个成员占 10 列,并左对齐。
即:
歌曲编号(10 列)歌曲名称(10 列) 歌手姓名(10 列)
1100(10 列) 落叶归根(10 列) 王力宏(10 列)
输入样例
1100 落叶归根 王力宏
1101 风吹麦浪 李健
1103 天空 王菲
1102 往事随风 齐秦
输出样例
创建列表后:
歌曲编号 歌曲名称 歌手姓名
1100 落叶归根 王力宏
1101 风吹麦浪 李健
1103 天空 王菲
插入一条信息后:
歌曲编号 歌曲名称 歌手姓名
1100 落叶归根 王力宏
1101 风吹麦浪 李健
1102 往事随风 齐秦
1103 天空 王菲
删除一条信息后:
歌曲编号 歌曲名称 歌手姓名
1100 落叶归根 王力宏
1101 风吹麦浪 李健
1103 天空 王菲
#include <stdio.h>
#include <stdlib.h>
struct PLAY_LIST
int number;
char name[25];
char artist[25];
struct PLAY_LIST *next;
;
int n;
struct PLAY_LIST *p;
void main()
struct PLAY_LIST *head;
struct PLAY_LIST *createList();
struct PLAY_LIST *insertItem(PLAY_LIST * head, PLAY_LIST * pNewPlayList);
struct PLAY_LIST *deleteItem(PLAY_LIST * pPlayList, int iItemNumber);
void displayList(struct PLAY_LIST * head);
head = createList();
char a[3][20] = "歌曲编号", "歌曲名称", "歌手姓名";
printf("创建列表后:\\n%-10s%-10s%-10s\\n", a[0], a[1], a[2]);
displayList(head);
insertItem(head, p);
printf("插入一条信息后:\\n%-10s%-10s%-10s\\n", a[0], a[1], a[2]);
displayList(head);
deleteItem(head, p->number);
printf("删除一条信息后:\\n%-10s%-10s%-10s\\n", a[0], a[1], a[2]);
displayList(head);
struct PLAY_LIST *createList(void)
struct PLAY_LIST *head;
struct PLAY_LIST *p1, *p2;
n = 0;
p1 = p2 = (struct PLAY_LIST *)malloc(sizeof(struct PLAY_LIST));
scanf("%d %s %s", &p1->number, &p1->name, &p1->artist);
head = NULL;
while (p1->number != 0)
n++;
if (n == 1)
head = p1;
else
p2->next = p1;
p2 = p1;
p1 = (struct PLAY_LIST *)malloc(sizeof(struct PLAY_LIST));
if (n == 3)
break;
scanf("%d %s %s", &p1->number, &p1->name, &p1->artist);
p = (struct PLAY_LIST *)malloc(sizeof(struct PLAY_LIST));
scanf("%d %s %s", &p->number, &p->name, &p->artist);
p2->next = NULL;
free(p1);
return (head);
void displayList(struct PLAY_LIST *head)
struct PLAY_LIST *p;
p = head;
if (head != NULL)
do
printf("%-10d%-10s%-10s\\n", p->number, p->name, p->artist);
p = p->next;
while (p != NULL);
else
printf("空链表!\\n");
struct PLAY_LIST *insertItem(PLAY_LIST *head, PLAY_LIST *pNewPlayList)
struct PLAY_LIST *p0, *p1, *p2;
p1 = head;
p0 = pNewPlayList;
if (head == NULL)
head = p0;
p0->next = NULL;
else
while ((p0->number > p1->number) && (p1->next != NULL))
p2 = p1;
p1 = p1->next;
if (p0->number <= p1->number)
if (head == p1)
head = p0;
else
p2->next = p0;
p0->next = p1;
else
p1->next = p0;
p0->next = NULL;
return head;
struct PLAY_LIST *deleteItem(PLAY_LIST *head, int iItemNumber)
struct PLAY_LIST *p1, *p2;
if (head == NULL)
printf("\\n 链表为空!\\n");
return (head);
p1 = head;
while (iItemNumber != p1->number && p1->next != NULL)
p2 = p1;
p1 = p1->next;
if (iItemNumber == p1->number)
if (p1 == head)
head = p1->next;
else
p2->next = p1->next;
return head;
实验09(03)任意位置显示一个中文
题目描述
参照实验九中第 4 题。
(1)在一个显示系统中,需要在任意位置显示一个中文或者英文字符,为此请根据表 9-4
设计一种数据结构。其中当 label=0 时,content 的 16 位数据中低 8 位为英文字符,高 8 位
的数据丢弃。当 label=1 时, content 的 16 位数据为中文数据。
(2)建立 2 个函数,函数的原型如下:
PACK_DATA packData(unsigned uRow,unsigned uCol, unsigned uLabel,char * pContent); /*封装数
据,即将中英文字符按照表 9-4 方式存储*/
void unpackData(PACK_DATA data); /*将封装的数据提取出来,并安装要求显示在屏幕上。*/
(3)考虑字符(content)可能是英文也可能是中文的情况。在主函数中,2 次调用函数 packData,
将信息 1(在第 2 行第 3 列显示英文字符 X)和信息 2(在第 3 行第 4 列显示中文字符”中”)
封装好;然后 2 次调用函数 unpackData 将上一步封装好的数据提取并显示出来。
输入描述
输入显示字符的信息。第一个数据为行号,第二个数据为列号,第三个数据为中英文标志,
第 4 部分数据为显示的字符。
输出描述
正确的地方显示字符
输入样例
1 2 1 中
输出样例
(一个空格,从第 2 列开始显示)中
#include <stdio.h>
typedef struct _PACK_DATA
unsigned int uRow : 3;
int uCol : 3;
unsigned char uLabel : 2;
unsigned short uContent : 16;
PACK_DATA, *PPACK_DATA;
PACK_DATA packData(unsigned uRow, unsigned uCol, unsigned uLabel, char *pContent)
PACK_DATA pack_data;
pack_data.uRow = uRow;
pack_data.uCol = uCol;
pack_data.uLabel = uLabel;
pack_data.uContent = *(unsigned short *)pContent;
return (pack_data);
void unpackData(PACK_DATA data)
int i;
char temp[3];
for (i = 0; i < data.uRow; i++)
printf("\\n");
for (i = 0; i < data.uCol; i++)
printf(" ");
if (data.uLabel == 1)
temp[0] = data.uContent & 0xff;
temp[1] = (data.uContent >> 8) & 0xff;
temp[2] = '\\0';
printf("%s\\n", temp);
else
printf("%c\\n", (char)data.uContent);
int main()
unsigned a, b, c;
char A[10];
PACK_DATA data;
scanf("%d %d %d %s", &a, &b, &c, A);
data = packData(a, b, c, A);
unpackData(data);
return 0;
实验09(04)枚举类型
题目描述
编写程序,根据用户输入的数字(1~12),输出相应的月份名。要求:用枚举类型实现。
输入描述
输入 1~12
输出描述
输出 January~December
输入样例
1
2
13
输出样例
January
February
Error!
#include <stdio.h>
int main()
enum Mouths
Jan,
Feb,
Mar,
Apr,
May,
Jun,
Jul,
Aug,
Sep,
Oct,
Nov,
Dec
;
enum Mouths i;
scanf("%d", &i);
if (i > 12)
printf("Error!");
else
switch (i - 1)
case Jan:
printf("January\\n");
break;
case Feb:
printf("February\\n");
break;
case Mar:
printf("March\\n");
break;
case Apr:
printf("April\\n");
break;
case May:
printf("May\\n");
break;
case Jun:
printf("June\\n");
break;
case Jul:
printf("July\\n");
break;
case Aug:
printf("August\\n");
break;
case Sep:
printf("September\\n");
break;
case Oct:
printf("October\\n");
break;
case Nov:
printf("November\\n");
break;
case Dec:
printf("December\\n");
break;
default:
printf("error!\\n");
break;
return 0;
以上是关于c语言 商品管理系统的主要内容,如果未能解决你的问题,请参考以下文章