#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
#define MAXNUM 100
typedef struct book
{ char sn[30]; /*書號*/
char name[30]; /*書名*/
char author[12]; /*作者*/
float price; /*單價*/
char press[21]; /*出版社*/
int num; /*庫存冊數*/
}BOOK;
int bkcount=6;
BOOK bk[MAXNUM];
void readdata()
{ int i;
FILE *p;
if((p=fopen("indata.txt","rt"))==NULL){return; }
//若打開檔案失敗,則直接回傳main主函式
fread(&bkcount,sizeof(int),1,p); //讀取1個資料項長度為sizeof(int)位元組,存盤到變數bkcount中。
for(i=0;i<bkcount;i++){
fread(&bk[i],sizeof(BOOK),1,p);
} //讀取1個資料項長度為sizeof(BOOK)位元組,存盤到變數bk[i]中。
fclose(p);
}
void savedata(){
int i;
FILE *p;
if((p=fopen("outdata.txt","wt+"))==NULL){
printf("can not open this file");return;}
fwrite(&bkcount,sizeof(int),1,p);
fwrite(bk,sizeof(BOOK),bkcount,p);
fclose(p);
}
display(int j){
printf("\n");
printf("書號\t");
printf("書名\t\t");
printf("作者\t\t");
printf("價格\t");
printf("出版社\t\t");
printf("庫存冊數\n");
printf("-----------------------------------------------------------------------\n");
printf("%s\t",bk[j].sn);
printf("%-12s\t",bk[j].name);
printf("%-10s\t",bk[j].author);
printf("%-4.1f\t",bk[j].price);
printf("%-20s\t",bk[j].press);
printf("%-2d\n",bk[j].num);
printf("-----------------------------------------------------------------------\n");}
/* 圖書資訊顯示實作代碼 */
booklist(){
int i;
printf(" 書號\t 書名\t\t作者\t\t價格\t出版社\t\t庫存冊數\n");
printf("--------------------------------------------------------------------------------\n");
for(i=0;i<bkcount;i++)
{ printf(" %s\t%-12s\t%-10s\t",bk[i].sn,bk[i].name,bk[i].author);
printf("%-4.1f\t%-20s\t%-2d\n",bk[i].price,bk[i].press,bk[i].num);
printf("--------------------------------------------------------------------------------\n");
}
printf("\n回傳上一級選單請按任意鍵!");
getch();
system("cls");
}
//按書號查詢代碼
void booksnfind()
{ char i[30];
int j,k,exist=0;
printf("請輸所要查詢書號(回傳上一級選單請輸入up):");
scanf("%s",&i);
if(strcmp(i,"up")==0) {system("cls");return;}
for(j=0;j<bkcount;j++)
{ if(strcmp(i,bk[j].sn)==0)
{ display(j);
printf("\n\n按任意鍵繼續查詢");
getch();
system("cls");
exist=0;
system("cls");
savedata();
booksnfind();
}
}
if(exist==0)
{printf("書庫沒有此圖書\n");
printf("\n請按任意鍵繼續查詢");
getch();
system("cls");
savedata();
booksnfind();
}
}
/* 按書名查詢圖書 */
void booknamefind()
{ char i[50];
int j,exist=0;
printf("請輸入圖書書名(回傳上一級選單請輸入up):");
scanf("%s",&i);
if(strcmp(i,"up")==0) {system("cls");return;}
for(j=0;j<bkcount;j++)
if(strcmp(i,bk[j].name)==0)
{ display(j);
printf("\n\n");
printf("按任意鍵繼續查詢");
getch();
system("cls");
exist=0;
system("cls");
savedata();
booknamefind();
}
if(exist==0)
{ printf("書庫沒有此圖書\n");
printf("\n請按任意鍵繼續查詢");
getch();
system("cls");
savedata();
booknamefind();
}
}
/* 按作者查詢圖書 */
void bookauthorfind()
{ char i[30];
int j,exist=0;
printf("請輸入圖書作者(回傳上一級選單請輸入up):");
scanf("%s",&i);
if(strcmp(i,"up")==0) {system("cls");return;}
for(j=0;j<bkcount;j++)
if(strcmp(i,bk[j].author)==0)
{ display(j);
printf("\n\n");
printf("按任意鍵繼續查詢");
getch();
system("cls");
exist=0;
system("cls");
savedata();
bookauthorfind();
}
if(exist==0)
{ printf("書庫沒有此圖書\n");
printf("\n請按任意鍵繼續查詢");
getch();
system("cls");
savedata();
bookauthorfind();
}
}
//圖書查詢實作代碼
void bookfind(){
int num1;
do{
printf("\n\n\n");
printf("\t\t\t【圖書資訊查詢】\n");
printf("\t\t-----------------------------------\n");
printf("\t\t\t1 按書號查詢 \n");
printf("\t\t\t2 按書名查詢 \n");
printf("\t\t\t3 按作者查詢 \n");
printf("\t\t\t4 回傳上一級 \n");
printf("\t\t-----------------------------------\n");
printf("\t\t\t請輸入選單選項1-4:");
scanf("%d",&num1);
system("cls");
switch(num1){
case 1:booksnfind();break;
case 2:booknamefind();break;
case 3:bookauthorfind();break;
case 4:return;
default:printf("選項錯誤!按任意鍵繼續!");
getch();
system("cls");
}
}while (num1);
}
int showsel()
{ int sel;
printf("\t\t程式設計課程設計(C/C++)\n\n");
printf("\t\t設計者:xxx \n");
printf("\t---------------------------------\n");
printf("\t\t 新型圖書出入庫管理系統 \n");
printf("\t---------------------------------\n");
printf("\t|\t1. 圖書資訊 |\n");
printf("\t|\t2. 圖書入庫 |\n");
printf("\t|\t3. 圖書出庫 |\n");
printf("\t|\t4. 圖書查詢 |\n");
printf("\t|\t5. 退出系統 |\n");
printf("\t---------------------------------\n");
printf("\t請選擇選單選項1-5:");
scanf("%d",&sel);
return sel;
}
//輸入新書資訊所用代碼
void newbook(){
printf("請輸入相關書籍資訊:\n");
printf("書號:");
scanf("%s",&bk[bkcount].sn) ;
printf("書名: ");
scanf("%s",&bk[bkcount].name) ;
printf("請輸入作者: ");
scanf("%s",&bk[bkcount].author);
printf("請輸入價格: ");
scanf("%f",&bk[bkcount].price);
printf("請輸入出版社: ");
scanf("%s",&bk[bkcount]);
printf("請輸入入庫冊數: ");
scanf("%d",&bk[bkcount]);
bkcount++;
printf("\n入庫成功,按任意鍵回傳。");
return;
}
//圖書入庫實作代碼
void bookin(){
char i[30];int j,k,exist=0;
printf("請輸入入庫書號(回傳上一級選單請輸入up):");
scanf("%s",&i);
if(strcmp(i,"up")==0) {system("cls");return;}
for(j=0;j<bkcount;j++)
{ if(strcmp(i,bk[j].sn)==0)
{ display(j);
printf("請輸入再入庫數量:");
scanf("%d",&k);
bk[j].num=bk[j].num+k;
display(j);
printf("\n按任意鍵繼續");
getch();
system("cls");
exist=0;
system("cls");
savedata();
bookin();
}
} if(exist==0)
{ newbook();
getch();
system("cls");
}
system("cls");
savedata();
bookin();
}
//洗掉圖書資訊實作代碼
void deletebk(int j){
int d;
d=j;
for(j=d;j<bkcount;j++)
{strcpy(bk[j].sn,bk[j+1].sn);
strcpy(bk[j].name,bk[j+1].name);
strcpy(bk[j].author,bk[j+1].author);
strcpy(bk[j].press,bk[j+1].press);
bk[j].num=bk[j+1].num;
bk[j].price=bk[j+1].price;
}
return;
}
/* 圖書出庫實作代碼 */
void booksale()
{ char i[30];int j,n,exist=0;
printf("請輸入出庫書號(回傳上一級選單請輸入up):");
scanf("%s",i);
printf("\n");
if(strcmp(i,"up")==0) {system("cls"); return;}
for(j=0;j<bkcount;j++)
{ if(strcmp(i,bk[j].sn)==0)
{ display(j);
printf("請輸入出庫數量:");
scanf("%d",&n);
if(n<=bk[j].num)
{ bk[j].num=bk[j].num-n;
display(j);
if(bk[j].num==0){
int b,c;
do{
printf("是否洗掉剩余冊數為0的圖書資訊?是請輸入1,否請輸入2。");
scanf("%s",&b);
switch(b)
{case 1:deletebk(j);c=0;system("cls");break;
case 2:c=0;system("cls");break;
default:printf("輸入錯誤!請重試。");system("cls");c=1;
}
}while(c);
}
printf("\n按任意鍵繼續");
getch();
system("cls");
}
else
{ printf("庫存不足");
printf("\n按任意鍵繼續");
getch();
system("cls");
savedata();
booksale();
exist=0;
}
system("cls");
savedata();
booksale();
}
}
if(exist==0)
{printf("書庫沒有此圖書\n");
printf("\n請按任意鍵繼續");
getch();
system("cls");
system("cls");
savedata();
booksale();
}
}
int main()
{ system("title 圖書出入庫管理系統");//設定cmd視窗標題
system("color 70"); //設定系統的背景色和前景色00~FF
readdata();
int num;
do {
num=showsel();
switch(num)
{ case 1:system("cls");booklist();break;
case 2:system("cls");bookin();break;
case 3:system("cls");booksale();break;
case 4:system("cls");bookfind();break;
case 5:exit(0);break;
default:system("cls"); printf("選項錯誤!按任意鍵繼續!");getch();system("cls");
}
}while(num);
}
初入編程的菜鳥,當我把程式所需要的2個檔案和程式放在同一檔案夾時,程式運行后沒有文字。如果沒有放在同一檔案夾的話正常運行但無法打開該檔案。如下圖:


uj5u.com熱心網友回復:
將檔案放到專案、屬性、除錯、作業目錄
對應檔案夾下。
uj5u.com熱心網友回復:
打開和保存檔案為同一個檔案,修改完善,供參考:#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
#define MAXNUM 100
typedef struct book
{ char sn[30]; /*書號*/
char name[80]; /*書名*/
char author[30]; /*作者*/
float price; /*單價*/
char press[80]; /*出版社*/
int num; /*庫存冊數*/
}BOOK;
int bkcount=0;
BOOK bk[MAXNUM];
void readdata()
{
int i=0;
FILE *p;
if((p=fopen("outdata.txt","rt"))==NULL){
printf("\n************這是一個新圖書出入庫管理系統**************\n");
return;
}
while(1){
int rc = fread(&bk[i],sizeof(BOOK),1,p);
if(rc<=0) break;
i++;
}
fclose(p);
bkcount = i;
}
void savedata()
{
int i;
FILE *p;
if((p=fopen("outdata.txt","wt+"))==NULL){
printf("can not open this file");
return;
}
i=0;
while(i<bkcount){
fwrite(&bk[i],sizeof(BOOK),1,p);
i++;
}
fclose(p);
}
display(int j)
{
printf("\n");
printf("書號\t");
printf("書名\t\t");
printf("作者\t\t");
printf("價格\t");
printf("出版社\t\t");
printf("庫存冊數\n");
printf("-----------------------------------------------------------------------\n");
printf("%s\t",bk[j].sn);
printf("%-12s\t",bk[j].name);
printf("%-10s\t",bk[j].author);
printf("%-4.1f\t",bk[j].price);
printf("%-20s\t",bk[j].press);
printf("%-2d\n",bk[j].num);
printf("-----------------------------------------------------------------------\n");}
//圖書資訊顯示實作代碼
booklist()
{
int i;
printf(" 書號\t 書名\t\t作者\t\t價格\t出版社\t\t庫存冊數\n");
printf("--------------------------------------------------------------------------------\n");
for(i=0;i<bkcount;i++)
{
printf(" %s\t%-12s\t%-10s\t",bk[i].sn,bk[i].name,bk[i].author);
printf("%-4.1f\t%-20s\t%-2d\n",bk[i].price,bk[i].press,bk[i].num);
printf("--------------------------------------------------------------------------------\n");
}
printf("\n回傳上一級選單請按任意鍵!");
getch();
system("cls");
}
//按書號查詢代碼
void booksnfind()
{
char i[30];
int j,k,exist=0;
printf("請輸所要查詢書號(回傳上一級選單請輸入\"up\"):");
scanf("%s",&i);
if(strcmp(i,"up")==0) {system("cls");return;}
for(j=0;j<bkcount;j++){
if(strcmp(i,bk[j].sn)==0){
display(j);
exist=1;//exist=0;
break;
}
}
if(exist==0){
printf("書庫沒有此圖書\n");
}
printf("\n請按任意鍵繼續查詢");
getch();
system("cls");
booksnfind();
}
// 按書名查詢圖書
void booknamefind()
{
char i[50];
int j,exist=0;
printf("請輸入圖書書名(回傳上一級選單請輸入\"up\"):");
scanf("%s",&i);
if(strcmp(i,"up")==0) {system("cls");return;}
for(j=0;j<bkcount;j++){
if(strcmp(i,bk[j].name)==0){
display(j);
printf("\n\n");
exist=1; //exist=0;
break;
}
}
if(exist==0){
printf("書庫沒有此圖書\n");
}
printf("按任意鍵繼續查詢");
getch();
system("cls");
booknamefind();
}
// 按作者查詢圖書
void bookauthorfind()
{
char i[30];
int j,exist=0;
printf("請輸入圖書作者(回傳上一級選單請輸入\"up\"):");
scanf("%s",&i);
if(strcmp(i,"up")==0) {system("cls");return;}
for(j=0;j<bkcount;j++){
if(strcmp(i,bk[j].author)==0){
display(j);
printf("\n\n");
exist=1; //exist=0;
break;
}
}
if(exist==0){
printf("書庫沒有此圖書\n");
}
printf("\n請按任意鍵繼續查詢");
getch();
system("cls");
bookauthorfind();
}
//圖書查詢實作代碼
void bookfind()
{
int num1=0;
do{
printf("\n\n\n");
printf("\t\t\t【圖書資訊查詢】\n");
printf("\t\t-----------------------------------\n");
printf("\t\t\t1 按書號查詢 \n");
printf("\t\t\t2 按書名查詢 \n");
printf("\t\t\t3 按作者查詢 \n");
printf("\t\t\t4 回傳上一級 \n");
printf("\t\t-----------------------------------\n");
printf("\t\t\t請輸入選單選項1-4:");
scanf("%d",&num1);
system("cls");
switch(num1){
case 1:booksnfind();break;
case 2:booknamefind();break;
case 3:bookauthorfind();break;
case 4:return;
default:printf("選項錯誤!按任意鍵繼續!");
getch();
system("cls");
}
}while (num1);
}
int showsel()
{
int sel=0;
printf("\t\t程式設計課程設計(C/C++)\n\n");
printf("\t\t設計者:xxx \n");
printf("\t---------------------------------\n");
printf("\t\t 新型圖書出入庫管理系統 \n");
printf("\t---------------------------------\n");
printf("\t|\t1. 圖書資訊 |\n");
printf("\t|\t2. 圖書入庫 |\n");
printf("\t|\t3. 圖書出庫 |\n");
printf("\t|\t4. 圖書查詢 |\n");
printf("\t|\t5. 退出系統 |\n");
printf("\t---------------------------------\n");
printf("\t請選擇選單選項1-5:");
scanf("%d",&sel);
return sel;
}
//輸入新書資訊所用代碼
void newbook()
{
printf("請輸入相關書籍資訊:\n");
printf("書號:%s\n",bk[bkcount].sn);
//scanf("%s", bk[bkcount].sn) ;
printf("書名: ");
scanf("%s",bk[bkcount].name) ;
printf("請輸入作者: ");
scanf("%s",bk[bkcount].author);
printf("請輸入價格: ");
scanf("%f",&bk[bkcount].price);
printf("請輸入出版社: ");
scanf("%s",bk[bkcount].press);
printf("請輸入入庫冊數: ");
scanf("%d",&bk[bkcount].num);
bkcount++;
printf("\n入庫成功,按任意鍵回傳。");
return;
}
//圖書入庫實作代碼
void bookin()
{
char i[30];int j,k,exist=0;
printf("請輸入入庫書號(回傳上一級選單請輸入\"up\"):");
scanf("%s",&i);
if(strcmp(i,"up")==0) {system("cls");return;}
for(j=0;j<bkcount;j++){
if(strcmp(i,bk[j].sn)==0){
display(j);
printf("請輸入再入庫數量:");
scanf("%d",&k);
bk[j].num=bk[j].num+k;
display(j);
exist=1; //exist=0;
break;
}
}
if(exist==0){
strcpy(bk[bkcount].sn,i);
newbook();
}
printf("\n按任意鍵繼續");
getch();
system("cls");
bookin();
}
//洗掉圖書資訊實作代碼
void deletebk(int j)
{
int d;
d=j;
for(j=d;j<bkcount-1;j++){
strcpy(bk[j].sn,bk[j+1].sn);
strcpy(bk[j].name,bk[j+1].name);
strcpy(bk[j].author,bk[j+1].author);
strcpy(bk[j].press,bk[j+1].press);
bk[j].num = bk[j+1].num;
bk[j].price = bk[j+1].price;
}
bkcount--;
return;
}
//圖書出庫實作代碼
void booksale()
{
char i[30];int j,n,exist=0;
printf("請輸入出庫書號(回傳上一級選單請輸入\"up\"):");
scanf("%s",i);
printf("\n");
if(strcmp(i,"up")==0) {system("cls"); return;}
for(j=0;j<bkcount;j++){
if(strcmp(i,bk[j].sn)==0){
display(j);
printf("請輸入出庫數量:");
scanf("%d",&n);
if(n<=bk[j].num){
bk[j].num=bk[j].num-n;
display(j);
if (bk[j].num==0){
int b=0,c=1;
do{
printf("是否洗掉剩余冊數為0的圖書資訊?是請輸入1,否請輸入2。");
scanf("%d",&b);
switch(b){
case 1:deletebk(j);c=0;system("cls");break;
case 2:c=0;system("cls");break;
default:printf("輸入錯誤!請重試。");system("cls");c=1;break;
}
}while(c);
}
}else{
printf("庫存不足");
}
exist=1;
break;
}
}
if(exist==0){
printf("書庫沒有此圖書\n");
}
printf("\n按任意鍵繼續");
getch();
system("cls");
booksale();
}
int main()
{
system("title 圖書出入庫管理系統");//設定cmd視窗標題
system("color 70");//設定系統的背景色和前景色00~FF
readdata(); //打開檔案
int num=0;
do {
num=showsel();//選單
switch(num){
case 1:system("cls");booklist();break;//圖書資訊顯示
case 2:system("cls");bookin();break; //圖書入庫
case 3:system("cls");booksale();break;//圖書出庫
case 4:system("cls");bookfind();break;//查詢
case 5:savedata();exit(0);;break; //保存退出
default:num = 6;
system("cls");
printf("選項錯誤!按任意鍵繼續!");
getch();
system("cls");
break;
}
}while(num);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/267894.html
標籤:新手樂園
上一篇:Matlab初學者
下一篇:求助exe運行記憶體泄漏
