C语言编程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言编程相关的知识,希望对你有一定的参考价值。

题目:书店图书销售系统
用C语言编程软件,模拟书店的销售系统,用户界面中的菜单至少应包括“图书信息录入”、“进书处理”、“显示书库现状”、“退出”4项。
1.录入书店图书信息。图书信息可以包括图书编号,图书名称,出版社,购进册数,购进价格,出售册数,出售价格;
2.进书处理能够随时购进新书,册数不限;
3.显示书库现状。
“有加分哦”
非常急啊!!!

C++的行不?
等等,要菜单??就是说要支持MFC??
要是您不嫌弃,就先试试这个吧,手头上只有这个了。

#include <string>//字符串头文件
#include <fstream>//文件头文件
#include <iostream>//是指标准库中输入输出流的头文件using namespace std;//使用名字空间std
const int BMAX=50; //书最多个数

//图书管理模块

//图书类
class book

public:
int no; //图书编号
char name[20]; //图书名称
int b_flag; //1为在架,2为借出
int b_del; //1为存在, 2为删除
public :
book() //构造函数
void setno(int n)

no=n; //图书编号取值

int getno()

return no; //返回图书编号值

void setname(char na[])

strcpy(name, na); //字符串复制

char* getname()

return name; //返回图书名称

void borbook()

b_flag=2; //借书标志

void delbook()

b_del=2; //删除标志

void addbook(int no,char na[]) //增加图书功能

setno(no);
setname(na);
b_flag=1;
b_del=1;


;
//图书数据库类

class bdatabase

public:
book btarray[BMAX]; //图书集合
int top;
public:
bdatabase()


book b;
top=-1;
fstream file("book.txt",ios::in); //打开文件
while (1)

file.read((char *)&b,sizeof(b));
if (!file) break;
top++;
btarray[top] = b;

file.close(); //关闭文件


~bdatabase() //析构函数, 将btarray[]写到book.txt文件中

fstream file("book.txt",ios::out);
for (int i=0;i<=top;i++)

if (btarray[i].b_del==1)
file.write((char *)&btarray[i],sizeof(btarray[i]));

file.close();


void addbooks() //往图书数据库中加图书

book bk;
int no;
char bname[20];
cout<<"请输入书号: ";
cin>>no;
cout<<endl<<"请输入书名: ";
cin>>bname;
cout<<endl;
bk.b_flag=1;
bk.addbook(no, bname);
top++;
btarray[top]=bk;
return;


int findbooks(int suffix) //查找图书,这个函数用于借书这书操作,suffix是数组下标

int no;
cout<<"请输入书号: ";
cin>>no;
for(int i=0; i<=top; i++)

if(btarray[i].no==no && btarray[i].b_del==1)

return i;


return -1;


int findbooks() //查找图书,这个函数用于图书维护

int no;
char value[6];
cout<<"请输入书号: ";
cin>>no;
for(int i=0; i<=top; i++)

if(btarray[i].no==no && btarray[i].b_del==1)

if(btarray[i].b_flag==1) strcpy(value,"在架");
if(btarray[i].b_flag==2) strcpy(value,"借出");
cout<<"书号: "<<btarray[i].no<<" 书的名称: "<<btarray[i].name<<" 图书状态 :"<<value<<endl;
return i;


return -1;


void editbooks() //编辑图书

int cur;
cur = findbooks();
if (cur==-1)
cout<<"没有这本书"<<endl;
return;

cout<<"书号: "<<btarray[cur].no<<" 书的名称: "<<btarray[cur].name<<endl;
cout<<"请修改数据:"<<endl;
cout<<endl<<"书的名称: ";
cin>>btarray[cur].name;
return ;


void delbooks() //删除图书

int cur;
cur = findbooks();
if (cur==-1)

return;

if(btarray[cur].b_flag==2) //删除时判断图书是否借出

cout<<"该图书已经借出,请在归还后再删除。"<<endl;
return;

btarray[cur].b_del=2;
return;


void listbooks() //显示全部图书

char value[6];
for(int i=0; i<=top; i++)


if(btarray[i].b_del==1)

if(btarray[i].b_flag==1) strcpy(value,"在架");
if(btarray[i].b_flag==2) strcpy(value,"借出");
cout<<"书号: "<<btarray[i].no<<" 书的名称: "<<btarray[i].name<<" 图书状态 :"<<value<<endl;


return;


;
//读者管理模块
//读者类
class reader

public:
int no;
char name[20];
int r_del; //1存在,2删除
int r_bor; //1借过书,2没有借书
book brbook;
public:
void addreader(int id, char na[])//增加读者

no = id;
strcpy(name, na);
r_del=1;

void setbrbook(book bt) //设置借书标记

brbook = bt;


book getbrbook()

return brbook; //返回借书信息

;
//读者数据库类
class rdatabase

public:
reader rdarray[BMAX];
int top;

public:
rdatabase()

reader rd;
top=-1;
fstream file("reader.txt",ios::in); //打开文件
while (1)

file.read((char *)&rd,sizeof(rd));
if (!file) break;
top++;
rdarray[top]=rd;

file.close(); //关闭文件


~rdatabase()//析构函数

fstream file("reader.txt",ios::out);
for (int i=0;i<=top;i++)

if (rdarray[i].r_del==1)
file.write((char *)&rdarray[i],sizeof(rdarray[i]));

file.close();


void addreaders() //添加读者

reader rd;
int no;
char rname[20];
cout<<"请输入学号: ";
cin>>no;
cout<<endl<<"请输入姓名: ";
cin>>rname;
cout<<endl;
rd.addreader(no, rname);
rd.r_bor=2;
top++;
rdarray[top]=rd;
return;

int findreaders(int suffix) //查找读者,这个函数用于借书还书操作。 参数suffix是数组下标

int no;
cout<<"请输入学号: ";
cin>>no;
for(int i=0; i<=top; i++)

if(rdarray[i].no==no && rdarray[i].r_del==1)

return i;


return -1;


int findreaders() //查找读者,这个函数用于读者维护操作

int no;
char value[3];
cout<<"请输入学号: ";
cin>>no;
for(int i=0; i<=top; i++)

if(rdarray[i].no==no && rdarray[i].r_del==1)

if(rdarray[i].r_bor==1) strcpy(value,"借");
if(rdarray[i].r_bor==2) strcpy(value,"无");
cout<<"学号: "<<rdarray[i].no<<" 姓名: "<<rdarray[i].name<<" 是否借书: "<<value<<endl;
return i;


return -1;

void editreaders() //编辑读者信息


int cur;
cur = findreaders();
if (cur==-1)
cout<<"没有该学生"<<endl;
return;

cout<<"请修改数据:"<<endl;
cout<<endl<<" 姓名: ";
cin>>rdarray[cur].name;
return ;

void delreaders() //删除读者,读者如果借书要还书后才能删除

int cur;
cur = findreaders();
if (cur==-1)

return;

if(rdarray[cur].r_bor==1)

cout<<"该用户借了图书,请还书后再删除"<<endl;
return;

rdarray[cur].r_del=2;
return;

void listreaders() //显示所有读者

char value[3];
for(int i=0; i<=top; i++)


if(rdarray[i].r_del==1)

if(rdarray[i].r_bor==1) strcpy(value,"借");
if(rdarray[i].r_bor==2) strcpy(value,"无");
cout<<"学号: "<<rdarray[i].no<<" 姓名: "<<rdarray[i].name<<" 是否借书: "<<value<<endl;


return;



;

void bookjiemain() //图书维护子菜单

cout<<"|---------------------|"<<endl;
cout<<"| 图书维护 |"<<endl;
cout<<"| (1)增 加 |"<<endl;
cout<<"| (2)更 改 |"<<endl;
cout<<"| (3)删 除 |"<<endl;
cout<<"| (4)查 找 |"<<endl;
cout<<"| (5)显 示 |"<<endl;
cout<<"| (6)返回上一层 |"<<endl;
cout<<"|---------------------|"<<endl;


void readerjiemian() //读者维护子菜单

cout<<"|---------------------|"<<endl;
cout<<"| 读者维护 |"<<endl;
cout<<"| (1)增 加 |"<<endl;
cout<<"| (2)更 改 |"<<endl;
cout<<"| (3)删 除 |"<<endl;
cout<<"| (4)查 找 |"<<endl;
cout<<"| (5)显 示 |"<<endl;
cout<<"| (6)返回上一层 |"<<endl;
cout<<"|---------------------|"<<endl;


void mainjiemian() //主界面

cout<<"***********************************************"<<endl;
cout<<"* 图 书 管 理 系 统 *"<<endl;
cout<<"* *"<<endl;
cout<<"* (1) 借 书 *"<<endl;
cout<<"* *"<<endl;
cout<<"* (2) 还 书 *"<<endl;
cout<<"* *"<<endl;
cout<<"* (3) 图书管理 *"<<endl;
cout<<"* *"<<endl;
cout<<"* (4) 用户管理 *"<<endl;
cout<<"* *"<<endl;
cout<<"* (0) 退 出 *"<<endl;
cout<<"***********************************************"<<endl;


void borrowtoreturn(char br)
//借书还书函数.参数br用来判断是“借书”还是“还书”.1为“借书”,2为“还书”

int rdid=0;
int bkid=0;
int rsuffix, bsuffix;
bdatabase t_bd;
rdatabase t_rd;
if(br=='1') //借书

rsuffix=t_rd.findreaders(rdid);
bsuffix=t_bd.findbooks(bkid);
if (rsuffix==-1 || bsuffix==-1)
return;
if(t_bd.btarray[bsuffix].b_flag==2)

cout<<"图书已经借出,请选择其它图书"<<endl;
return;

if(t_rd.rdarray[rsuffix].r_bor==1)

cout<<"你已经借过图书,请先归还再借其它图书"<<endl;
return;

t_bd.btarray[bsuffix].b_flag=2;
t_rd.rdarray[rsuffix].r_bor=1;
t_rd.rdarray[rsuffix].brbook=t_bd.btarray[bsuffix];
return;


if(br=='2')

rsuffix=t_rd.findreaders(rdid);
bsuffix=t_bd.findbooks(bkid);
if (rsuffix==-1 || bsuffix==-1 )
return;

if(t_rd.rdarray[rsuffix].brbook.no==t_bd.btarray[bsuffix].no)

t_bd.btarray[bsuffix].b_flag=1;
t_rd.rdarray[rsuffix].r_bor=2;
t_rd.rdarray[rsuffix].brbook=t_bd.btarray[bsuffix];

else

cout<<"请重新输入,读者借的图书号不正确"<<endl;
return;

return;



void booksmange()

char in;
bdatabase bd;
do
bookjiemain();
cin>>in;
switch (in)

case '1':
bd.addbooks();
break;
case '2':
bd.editbooks();
break;
case '3':
bd.delbooks();
break;
case '4':
bd.findbooks();
break;
case '5':
bd.listbooks();
break;
case '6':
break;
default:cout<<"输入错误,请从新输入。"<<endl;;

while(in!='6');
return;


void readersmange()

char in;
rdatabase bd;
do
readerjiemian();
cin>>in;
switch (in)

case '1':
bd.addreaders();
break;
case '2':
bd.editreaders();
break;
case '3':
bd.delreaders();
break;
case '4':
bd.findreaders();
break;
case '5':
bd.listreaders();
break;
case '6':
break;
default:cout<<"输入错误,请从新输入。"<<endl;

while(in!='6');
return;



int main(int argc, char* argv[])
char in;
do
mainjiemian();
cin>>in;
switch (in)

case '1':
borrowtoreturn(in);
break;
case '2':
borrowtoreturn(in);
break;
case '3':
booksmange();
break;
case '4':
readersmange();
break;
case '0':
break;
default:cout<<"输入错误,请从新输入。"<<endl;

while(in!='0');
return 0;
参考技术A /*
图书的数量和价格必须是数字,否则可能会出错

另外这个程序没有要求做出售图书的功能,从而售出册书始终为0
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iomanip>
#include <iostream>
using namespace std;

#define MAX_ID_LEN 20
#define MAX_NAME_LEN 40
#define MAX_PRESS_NAME_LEN 40
#define MAX_BOOK_KIND 1000 //书店最多销售图书种类

#define NULL 0

struct BOOK_INFO
char id[MAX_ID_LEN+1]; //图书编号
char name[MAX_NAME_LEN+1]; //图书名称
char press_name[MAX_PRESS_NAME_LEN+1]; //出版社
int total; //购进册数
double buy_price; //购进价格
int sale_total; //卖出册数
double sale_price; //买出价格
;

BOOK_INFO book[MAX_BOOK_KIND];
int index = 0;

void init_book_shop()

memset(book, 0, sizeof(book));


void show_menu()

printf("------------------图书销售系统菜单------------------\n");
printf("----- 1.图书信息录入 -----\n");
printf("----- 2.进书处理 -----\n");
printf("----- 3.显示书库现状 -----\n");
printf("----- 4.退出 -----\n");
printf("----------------------------------------------------\n");


BOOK_INFO *search(char *id)

/*通过图书的id来查找图书,这里如果要用这个函数,则需传入你录入的图书的编号
*/
int i;

for(i=0; i<index; i++)

if ( 0 == strcmp(id, book[i].id) )

return &book[i];



return NULL;


void entering_book_info()
/*录入图书信息的函数
请输入图书编号(最大20个字符):
请输入图书名称(最大40个字符):
请输入出版社名称(最大40个字符):
请输入购进册数:
请输入图书进价:
请输入图书售价:
输入完后如果不输入Y或者y则停止录入图书信息
*/

char c, buf[128];

do
if( index == MAX_BOOK_KIND)

printf("图书种类已经达到了最大值%d,无法继续添加\n", MAX_BOOK_KIND);
return;


printf("请输入图书编号(最大%d个字符):", MAX_ID_LEN);
scanf("%s", book[index].id);

if(search(book[index].id))

printf("图书编号已经存在,请重新输入!\n");
continue;


printf("请输入图书名称(最大%d个字符):", MAX_NAME_LEN);
scanf("%s",book[index].name);

printf("请输入出版社名称(最大%d个字符):", MAX_PRESS_NAME_LEN);
scanf("%s",book[index].press_name);

printf("请输入购进册数:");
scanf("%d", &(book[index].total));

printf("请输入图书进价:");
scanf("%s", buf);
book[index].buy_price = atof(buf);

printf("请输入图书售价:");
scanf("%s", buf);
book[index].sale_price = atof(buf);

getchar();
printf("是否继续录入图书?(Y or N):");
scanf("%c", &c);

index++;
book[index].sale_total = 0;

if(c != 'Y' && c != 'y')

return;


while(1);


void stock_book()
/*
进书管理
通过这个函数来购进已经录入过某种噢乖编号的图书,这样录入更方便
如果这个编号没有路如过,那么就会通过1也就是一条条的信息录入的方式录入图书信息
**/
char c;
int num;
BOOK_INFO *info;

do

printf("请输入图书编号(最大%d个字符):", MAX_ID_LEN);
scanf("%s", book[index].id);

if( (info = search(book[index].id)) == NULL)

printf("图书编号不存在,请先进行图书信息录入,谢谢!\n");
break;


printf("请输入购进册数:");
scanf("%d", &num);

info->total = info->total + num;

getchar();

printf("是否继续录入?(Y or N):");
scanf("%c", &c);

if(c != 'Y' && c != 'y')

return;


while(1);


void show_all()

/*显示所有的图书的信息格式如下
编号 名称 出版社 购进册数 进价 售出册数 售价
kj lk d 3 7.00 0 20.00
3 lk jk 6 3.00 0 66.00
*/
int i;

printf("编号\t名称\t出版社\t购进册数\t进价\t售出册数\t售价\n");

for(i = 0; i < index; i++)

printf("%4s\t%4s\t%6s\t% 8d\t%.2f\t% 8d\t%.2f\n",
book[i].id,book[i].name,book[i].press_name,book[i].total,book[i].buy_price,
book[i].sale_total,book[i].sale_price);


==============
基本上没怎么用到指针,另外指针也没那么可怕吧,只是search的时候返回图书编号的指针
参考技术B #include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_ID_LEN 20
#define MAX_NAME_LEN 40
#define MAX_PRESS_NAME_LEN 40
#define MAX_BOOK_KIND 1000 //书店最多销售图书种类

#define NULL 0

struct BOOK_INFO
char id[MAX_ID_LEN+1]; //图书编号
char name[MAX_NAME_LEN+1]; //图书名称
char press_name[MAX_PRESS_NAME_LEN+1]; //出版社
int total; //购进册数
double buy_price; //购进价格
int sale_total; //卖出册数
double sale_price; //买出价格
;

BOOK_INFO book[MAX_BOOK_KIND];
int index = 0;

void init_book_shop()

memset(book, 0, sizeof(book));


void show_menu()

printf("------------------图书销售系统菜单------------------\n");
printf("----- 1.图书信息录入 -----\n");
printf("----- 2.进书处理 -----\n");
printf("----- 3.显示书库现状 -----\n");
printf("----- 4.退出 -----\n");
printf("----------------------------------------------------\n");


BOOK_INFO *search(char *id)

int i;

for(i=0; i<index; i++)

if ( 0 == strcmp(id, book[i].id) )

return &book[i];



return NULL;


void entering_book_info()

char c, buf[128];

do
if( index == MAX_BOOK_KIND)

printf("图书种类已经达到了最大值%d,无法继续添加\n", MAX_BOOK_KIND);
return;


printf("请输入图书编号(最大%d个字符):", MAX_ID_LEN);
scanf("%s", book[index].id);

if(search(book[index].id))

printf("图书编号已经存在,请重新输入!\n");
continue;


printf("请输入图书名称(最大%d个字符):", MAX_NAME_LEN);
scanf("%s",book[index].name);

printf("请输入出版社名称(最大%d个字符):", MAX_PRESS_NAME_LEN);
scanf("%s",book[index].press_name);

printf("请输入购进册数:");
scanf("%d", &(book[index].total));

printf("请输入图书进价:");
scanf("%s", buf);
book[index].buy_price = atof(buf);

printf("请输入图书售价:");
scanf("%s", buf);
book[index].sale_price = atof(buf);

getchar();
printf("是否继续录入图书?(Y or N):");
scanf("%c", &c);

index++;
book[index].sale_total = 0;

if(c != 'Y' && c != 'y')

return;


while(1);


void stock_book()

char c;
int num;
BOOK_INFO *info;

do

printf("请输入图书编号(最大%d个字符):", MAX_ID_LEN);
scanf("%s", book[index].id);

if( (info = search(book[index].id)) == NULL)

printf("图书编号不存在,请先进行图书信息录入,谢谢!\n");
break;


printf("请输入购进册数:");
scanf("%d", &num);

info->total = info->total + num;

getchar();

printf("是否继续录入?(Y or N):");
scanf("%c", &c);

if(c != 'Y' && c != 'y')

return;


while(1);


void show_all()

int i;

printf("编号\t名称\t出版社\t购进册数\t进价\t售出册数\t售价\n");

for(i = 0; i < index; i++)

printf("%4s\t%4s\t%6s\t% 8d\t%.2f\t% 8d\t%.2f\n",
book[i].id,book[i].name,book[i].press_name,book[i].total,book[i].buy_price,
book[i].sale_total,book[i].sale_price);



void main()

int i = 0;
bool quit = false;

init_book_shop();

while(!quit)

show_menu();
printf("请选择菜单:");
scanf("%d", &i);

switch(i)
case 1:
entering_book_info();
break;
case 2:
stock_book();
break;
case 3:
show_all();
break;
case 4:
printf("程序退出,谢谢!\n");
quit = true;
break;
default:
printf("菜单选择错误,请重新选择!\n");
break;



本回答被提问者采纳

2018年秋季学期《c语言程序设计》编程总结

《c语言程序设计》第四周编程总结

《c语言程序设计》第五周编程总结

《c语言程序设计》第六周编程总结

《c语言程序设计》第七周编程总结

《c语言程序设计》第八周编程总结

《c语言程序设计》第九周编程总结

《c语言程序设计》第十周编程总结

《c语言程序设计》第十一周编程总结

《c语言程序设计》第十二周编程总结

《c语言程序设计》第十三周编程总结

以上是关于C语言编程的主要内容,如果未能解决你的问题,请参考以下文章

C语言和ARDUINO语言一样吗

c语言和c++有啥关系

“C语言是中间语言”,中间语言是啥意思?

C语言编程

C语言的发展及其特点

c语言编程问题