简易图书管理系统,devc++中运行
define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef struct
ElemType *elem;
int length;
int listsize;
sizeof(ElemType)
SqList;
status InitList_Sq(SqList &L)
L.elem =(ElemType ) malloc (LIST_INIT_SIZEsizeof(ElemType) );
if (!L.elem) exit(OVERFLOW);
L.length=0;
L.listsize=LIST_INIT_SIZE; return OK;
InitList_Sq
对于你这个问题可以参考如下链接:
https://www.jb51.net/article/132742.htm
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#include"conio.h"
#define Pquantity 3
#define MAX 1000
#define N 5
int k=0;
/*结构体类型*/
typedef struct
{ int num;/*编号*/
char name[20];/*书名*/
char author[20];/*作者*/
char press[20];/*出版社*/
float price;/*价格*/
int quantity;/*数量*/
}STUDENTS;
int read_file(STUDENTS stu[])
{ FILE *fp;
int i=0;
if((fp=fopen("stu.txt","rt"))==NULL)
{printf("\n\n—————库存文件不存在!请创");
return 0;
}
while(feof(fp)!=1)
{
fread(&stu[i],sizeof(STUDENTS),1,fp);
if(stu[i].num==0)
break;
else
i++;
}
fclose(fp);
return i;
}
void save_file(STUDENTS stu[],int sum)
{FILE*fp;
int i;
if((fp=fopen("stu.txt","wb"))==NULL)
{printf("写文件错误!\n");
return;
}
for(i=0;i<sum;i++)
if(fwrite(&stu[i],sizeof(STUDENTS),1,fp)!=1)
printf("写文件错误!\n");
fclose(fp);
}
/*创建图书信息*/
int input(STUDENTS stu[])
{ int i,x;
for(i=0;i<1000;i++)
{
system("cls");
printf("\n\n 录入图书信息 (最多%d本)\n",MAX);
printf(" ----------------------------\n");
printf("\n 第%d本图书",k+1);
printf("\n 请输入图书的编号:");
scanf("%d",&stu[k].num);
printf("\n 请输入图书的书名:");
scanf("%s",stu[k].name);
printf("\n 请输入图书的作者:");
scanf("%s",stu[k].author);
printf("\n 请输入图书的出版社:");
scanf("%s",stu[k].press);
printf("\n 请输入图书的价格:");
scanf("%f",&stu[k++].price);
printf("\n 请输入图书的数量:");
scanf("%d",&stu[i].quantity);
printf("\n 请按1键返回菜单或按0键继续创建");
scanf("%d",&x);
if(x)
break;
}
return k;
}
/*删除图书信息*/
void deletel(STUDENTS stu[])
{ system("cls");
char Stuname2[20];
int i,j;
printf("请输入图书书名:");
scanf("%s",Stuname2);
printf("\n");
for(i=0;i<k;i++)
if(strcmp(stu[i].name,Stuname2)==0)
for(j=0;j<20;j++)
stu[i].name[j]=stu[i+1].name[j];
k--;
printf("删除成功\n");
printf("按任意键加回车返回主菜单!");
scanf("%d",&i);
getchar();
}
/*打印图书信息*/
void output(STUDENTS stu[])
{ system("cls");
int i;
for(i=0;i<k;i++)
printf("编号:%d,书名:%s,作者:%s,出版社:%s,价格: %.2f,数量:%d\n",stu[i].num,stu[i].name,
stu[i].author,stu[i].press,stu[i].price,stu[i].quantity);
printf("按任意键加回车返回主菜单!");
scanf("%d",&i);
getchar();
}
/*查询图书信息*/
void inquire(STUDENTS stu[])
{ int i;
char name[20];
system("cls");
printf(" \n\n请输入您要查找的图书的书名:");
scanf("%s",&name);
for(i=0;i<k;i++)
if(strcmp(name,stu[i].name)==0)
printf("\n\n\n编号:%d,书名:%s,作者:%s,出版社:%s,价格: %.2f,数量:%d\n",stu[i].num,stu[i].name,
stu[i].author,stu[i].press,stu[i].price,stu[i].quantity);
printf("按任意键加回车返回主菜单!");
scanf("%d",&i);
getchar();
}
/*修改图书信息*/
void change(STUDENTS stu[])
{ int num,i,choice;
system("cls");
printf("\n\n\n 请输入您要修改的图书的编号");
scanf("%d",&num);
for(i=0;i<k;i++)
{ if(num==stu[i].num)
printf("\n编号:%d,书名:%s,作者:%s,出版社:%s,价格: %.2f,数量:%d\n",stu[i].num,stu[i].name,
stu[i].author,stu[i].press,stu[i].price,stu[i].quantity);
printf("\n\n\n ********请输入您想要修改的数据********\n\n");
printf(" 1. 编号\n\n");
printf(" 2. 书名\n\n");
printf(" 3. 作者\n\n");
printf(" 4. 出版社\n\n");
printf(" 5. 价格\n\n");
printf(" 6. 数量\n\n");
printf(" 请选择(1-6):");
scanf("%d",&choice);
switch(choice)
{case 1:{
printf("\n 请输入你改的新编号");
scanf("%d",&stu[i].num);
break;
}
case 2:{
printf("\n 请输入你改的新书名");
scanf("%s",stu[i].name);
break;
}
case 3:{
printf("\n 请输入你改的新作者");
scanf("%s",stu[i].author);
break;
}
case 4:{
printf("\n 请输入你改的新出版社");
scanf("%s",stu[i].press);
break;
}
case 5:{
printf("\n 请输入你改的新价格");
scanf("%f",&stu[i].price);
break;
case 6:{
printf("\n 请输入你改的新数量");
scanf("%d",&stu[i].quantity);
break;
}
}
}
printf("编号:%d,书名:%s,作者:%s,出版社:%s,价格: %.2f,数量:%d\n",stu[i].num,stu[i].name,
stu[i].author,stu[i].press,stu[i].price,stu[i].quantity);
printf("按任意键加回车返回主菜单!");
scanf("%d",&i);
break;
}
}
/*图书价格信息排名*/
void sort(STUDENTS stu[])
{ int i,j,n=1,x;
system("cls");
int t;
for(i=0;i<k-1;i++)
for(j=i+1;j<k;j++)
if(stu[i].price<stu[j].price)
{ t=stu[i].price;
stu[i].price=stu[j].price;
stu[j].price=t;
t=stu[i].num;
stu[i].num=stu[j].num;
stu[j].num=t;
}
for(i=0;i<k;i++)
printf("排名 编号 价格\n %d %d %.2f\n",n++,stu[i].num,stu[i].price);
printf("按任意键加回车返回主菜单!");
scanf("%d",&x);
getchar();
}
void pquantitydis()
{
printf(" \n\n\n **********************************\n");
printf(" * *\n");
printf(" * *\n");
printf(" * *\n");
printf(" * 欢迎进入图书信息管理系统 *\n");
printf(" * *\n");
printf(" * *\n");
printf(" * *\n");
printf(" **********************************\n");
}
void check()
{
char userName[5];/*用户名*/
char userPWD[5];/*密码*/
int i,sum;
system("color 0B");
for(i = 1; i < 4; i++)
{
/*用户名和密码均为abcde;*/
printf(" (用户名和密码均为abcde)\n\n");
printf("\n 请输入您的用户名:");
gets(userName);
printf("\n 请输入您的密码:");
gets(userPWD);
if ((strcmp(userName,"abcde")==0) && (strcmp(userPWD,"abcde")==0))/*验证用户名和密码*/
{
printf("\n *用户名和密码正确,显示主菜单*");
return;
}
else
{
if (i < 3)
{
printf("用户名或密码错误,提示用户重新输入");
printf("用户名或密码错误,请重新输入!");
}
else
{
printf("连续3次输错用户名或密码,退出系统。");
printf("您已连续3次将用户名或密码输错,系统将退出!");
exit(1);
}
}
}
}
void menu()
{
STUDENTS stu[20];
int choice,k,sum;
sum=read_file(stu);
if(sum==0)
{ printf("首先录入基本库存信息!按回车后进入—————\n");
getch();
sum=input(stu);
}
do
{ system("cls");
printf("\n\n\n ********图书信息管理系统********\n\n");
printf(" 1. 创建图书信息\n\n");
printf(" 2. 打印图书信息\n\n");
printf(" 3. 查询图书信息\n\n");
printf(" 4. 修改图书信息\n\n");
printf(" 5. 删除图书信息\n\n");
printf(" 6. 图书价格信息排名\n\n");
printf(" 0. 退出系统\n\n");
printf(" 请选择(0-6):");
scanf("%d",&choice);
switch(choice)
{
case 1: k=input(stu); break;/*创建图书信息*/
case 2: output( stu) ; break;/*打印图书信息*/
case 3: inquire(stu); break;/*查询图书信息*/
case 4: change(stu); break;/*修改图书信息*/
case 5: deletel(stu); break;/*删除图书信息*/
case 6: sort(stu); break;/*图书价格信息排名*/
case 0: break;
}
}while(choice!=0);
save_file(stu,sum);
}
int main()
{
int i,sum;
pquantitydis();
check();
menu();
}
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!
你的代码补全后运行结果如下:
代码:
#include <iostream>
#include <string>
using namespace std;
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
struct ElemType
{
int id; //书号
char name[40]; //书名
//==运算符重载
int operator==(const ElemType& p)
{
return (id == p.id && strcmp(name,p.name)==0);
}
};
enum Status
{
OK=1,
ERROR=2
};
typedef struct {
ElemType* elem;
int length;
int listsize;
}SqList;
Status InitList_Sq(SqList& L)
{
L.elem = (ElemType*)malloc(LIST_INIT_SIZE * sizeof(ElemType));
if (!L.elem) exit(OVERFLOW); //这行可不写
L.length = 0;
L.listsize = LIST_INIT_SIZE;
return OK;
}
//插入函数
Status ListInsert_Sq(SqList& L, int i, ElemType e)
{
ElemType* newbase = 0;
int j;
if (i<1 || i>L.length + 1) return ERROR;
if (L.length >= L.listsize)
{
newbase = (ElemType*)realloc(L.elem, (L.listsize + LISTINCREMENT));
if (!newbase) exit(OVERFLOW); //这行可不写
L.elem = newbase;
L.listsize += LISTINCREMENT;
}
for (j = L.length - 1; j >= i-1; j--)
L.elem[j + 1] = L.elem[j];
L.elem[i - 1] = e;
++L.length;
return OK;
}
//删除函数
Status ListDelete_Sq(SqList& L, int i, ElemType& e)
{
int j;
if (i < 1 || i > L.length) return ERROR;
e = L.elem[i - 1];
for (j = i; j <= L.length - 1; j++)
L.elem[j - 1] = L.elem[j];
--L.length;
return OK;
}
//在线性表中查找元素
int LocateElem(SqList L, ElemType e)
{
for (int i = 0; i < L.length; i++)
{
if (L.elem[i] == e)
return i + 1;
}
return 0;
}
//显示
void ShowList_Sq(SqList L)
{
for (int i = 0; i < L.length; i++)
{
cout << L.elem[i].id << " " << L.elem[i].name << endl;
}
}
int main()
{
SqList L;
InitList_Sq(L); //初始化L
//插入表格中的数据
ElemType es[5] = { 1001,"大学英语",1010,"大学物理",1560,"数据库原理",1892,"数据结构",1056,"C++程序设计" };
for (int i = 1; i <= 5; i++)
ListInsert_Sq(L, i,es[i - 1]);
ElemType einsert;
einsert.id = 1098;
strcpy(einsert.name,"Python 语言程序设计");
//指定位置插入元素
int pos = 0;
cout << "请输入插入位置:";
cin >> pos;
if (ListInsert_Sq(L, pos, einsert) == OK)
cout << "插入成功!" << endl;
else
cout << "插入失败!" << endl;
cout << "插入元素后链表中的元素:" << endl;
ShowList_Sq(L);
//删除指定位置的元素
cout << "请输入删除的位置:";
cin >> pos;
ElemType edel;
if (ListDelete_Sq(L, pos, edel) == OK)
{
cout << "删除成功,删除的元素是:" << endl;
cout << edel.id << " " << edel.name << endl;
}
else
cout << "删除失败" << endl;
cout << "删除元素后链表中的元素:" << endl;
ShowList_Sq(L);
return 0;
}