亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C語言實現(xiàn)簡單圖書管理系統(tǒng)

 更新時間:2021年03月10日 08:24:41   作者:zhangyucha0  
這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)圖書管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

目前為止跟著學(xué)校進(jìn)度學(xué)習(xí)C語言大概半年左右,基礎(chǔ)學(xué)習(xí)只學(xué)到了指針,學(xué)得非常淺。說實話,起初對C語言的印象———只是一個學(xué)習(xí)計算機(jī)語言的敲門磚,對具體C語言如何應(yīng)用等,非常迷茫。直到大一下半學(xué)期的高級語言設(shè)計課程之后,試過dos運行的圖形化界面的完整小程序,才發(fā)現(xiàn)C語言的魅力。

ok,廢話不多說了,下面是我第二節(jié)課的作品————C語言的圖書管理系統(tǒng)。一個簡單的小程序。并非純原創(chuàng),是基于網(wǎng)絡(luò)搜索到的“學(xué)生管理系統(tǒng)”改編而成的。通過直接瀏覽、修改一個完整的代碼,我的收獲頗豐。我認(rèn)為這樣比枯燥的學(xué)習(xí)代碼更加高效、易懂、易記。以下是幾個我在修改程序時學(xué)到的對于我來說比較有用的幾點:

(這些可能很簡單,但是我之前真的沒學(xué)過(⊙﹏⊙)b )

1.DOS界面的顏色設(shè)置(背景、字體顏色)

color [attr]

下面是顏色代碼:(如 color fc 為亮白色產(chǎn)生亮紅色,第一個背景,第二個前景)

0 = 黑色 8 = 灰色
1 = 藍(lán)色 9 = 淡藍(lán)色
2 = 綠色 A = 淡綠色
3 = 湖藍(lán)色 B = 淡淺綠色
4 = 紅色 C = 淡紅色
5 = 紫色 D = 淡紫色
6 = 黃色 E = 淡黃色
7 = 白色 F = 亮白色
dos只能顯示這幾種基礎(chǔ)顏色并不能自己定制其他的顏色

2.字符串的比較(用于密碼驗證等)

strcmp 是一個比較字符串的函數(shù) 原型:extern int strcmp(char *s1,char * s2); 用法:#include <string.h>  功能:比較字符串s1和s2。 說明: 當(dāng)s1<s2時,返回值<0 當(dāng)s1=s2時,返回值=0 當(dāng)s1>s2時,返回值>0

3.C語言的文件操作

定義一個代表文件的符號(指針變量)這樣的形式FILE *fp

打開文件的語句是

fopen(文件位置,打開模式);

文件位置好理解,就是文件所在的位置,例如D://test.txt

打開模式有幾種,

r(read): 讀

w(write): 寫

a(append): 追加

t(text): 文本文件,可省略不寫

b(banary): 二進(jìn)制文件

+: 讀和寫

一般是rt+,也可以寫成r+,和w+,就是讀和寫,能保留原來的內(nèi)容。所以打開C盤下my目錄中的文件c:\my\test.txt的語句是

fp=fopen("c://my/test.txt","r+")。注意文件夾符號同上面的不同。

4.代碼模塊(驗證密碼、查詢信息、修改信息、刪除信息)

①安全驗證

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("連續(xù)3次輸錯用戶名或密碼,退出系統(tǒng)。"); 
 printf("您已連續(xù)3次將用戶名或密碼輸錯,系統(tǒng)將退出!"); 
 exit(1); 
 } 
 } 
 } 
} 

②查詢圖書信息

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,數(shù)量:%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(); 
 } 

原理是通過循環(huán),將所有stu數(shù)組中的學(xué)號stu[i].num同輸入要查詢的學(xué)號num對比,如果一樣,就printf顯示。

③修改圖書信息

函數(shù)是change(STUDENTS stu[])

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,數(shù)量:%d\n",stu[i].num,stu[i].name, 
 stu[i].author,stu[i].press,stu[i].price,stu[i].quantity); 
 
 printf("\n\n\n ********請輸入您想要修改的數(shù)據(jù)********\n\n"); 
 printf(" 1. 編號\n\n"); 
 printf(" 2. 書名\n\n"); 
 printf(" 3. 作者\n\n"); 
 printf(" 4. 出版社\n\n"); 
 printf(" 5. 價格\n\n"); 
 printf(" 6. 數(shù)量\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 請輸入你改的新數(shù)量"); 
 scanf("%d",&stu[i].quantity); 
 break; 
 } 
 } 
 } 

原理是首先定位,然后輸入新的值替換以前的值。

④刪除圖書信息

函數(shù)是 void deletel(STUDENTS stu[])

主要原理是

printf("請輸入圖書名稱:"); 
scanf("%s",Stuname2); 

讓用戶輸入圖書的名稱,然后從頭開始比對每個stu變量中的名稱
[csharp] view plain copy
if(strcmp(stu[i].name,Stuname2)==0) 
 for(j=0;j<20;j++) 
 stu[i].name[j]=stu[i+1].name[j]; 
 k--; 

如果找到名字相符的話,就將下一個名字覆蓋前一個名字

以下是完整的主程序代碼:

#include"stdio.h" 
#include"stdlib.h" 
#include"string.h" 
#include"conio.h" 
#define Pquantity 3 
#define MAX 1000 
#define N 5 
int k=0; 
 /*結(jié)構(gòu)體類型*/ 
typedef struct 
{ int num;/*編號*/ 
 char name[20];/*書名*/ 
 char author[20];/*作者*/ 
 char press[20];/*出版社*/ 
 float price;/*價格*/ 
 int quantity;/*數(shù)量*/ 
 
 
}STUDENTS; 
 
int read_file(STUDENTS stu[]) 
{ FILE *fp; 
 int i=0; 
 if((fp=fopen("stu.txt","rt"))==NULL) 
 {printf("\n\n—————庫存文件不存在!請創(chuàng)"); 
 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); 
} 
 
 
/*創(chuàng)建圖書信息*/ 
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 請輸入圖書的數(shù)量:"); 
 scanf("%d",&stu[i].quantity); 
 printf("\n 請按1鍵返回菜單或按0鍵繼續(xù)創(chuàng)建"); 
 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,數(shù)量:%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,數(shù)量:%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,數(shù)量:%d\n",stu[i].num,stu[i].name, 
 stu[i].author,stu[i].press,stu[i].price,stu[i].quantity); 
 
 printf("\n\n\n ********請輸入您想要修改的數(shù)據(jù)********\n\n"); 
 printf(" 1. 編號\n\n"); 
 printf(" 2. 書名\n\n"); 
 printf(" 3. 作者\n\n"); 
 printf(" 4. 出版社\n\n"); 
 printf(" 5. 價格\n\n"); 
 printf(" 6. 數(shù)量\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 請輸入你改的新數(shù)量"); 
 scanf("%d",&stu[i].quantity); 
 break; 
 } 
 } 
 } 
 
 printf("編號:%d,書名:%s,作者:%s,出版社:%s,價格: %.2f,數(shù)量:%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("  * 歡迎進(jìn)入圖書信息管理系統(tǒng) *\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("連續(xù)3次輸錯用戶名或密碼,退出系統(tǒng)。"); 
 printf("您已連續(xù)3次將用戶名或密碼輸錯,系統(tǒng)將退出!"); 
 exit(1); 
 } 
 } 
 } 
} 
void menu() 
{ 
 STUDENTS stu[20]; 
 int choice,k,sum; 
 sum=read_file(stu); 
 if(sum==0) 
 { printf("首先錄入基本庫存信息!按回車后進(jìn)入—————\n"); 
 getch(); 
 sum=input(stu); 
 } 
 
 do 
 { system("cls"); 
 printf("\n\n\n ********圖書信息管理系統(tǒng)********\n\n"); 
 printf("  1. 創(chuàng)建圖書信息\n\n"); 
 printf("  2. 打印圖書信息\n\n"); 
 printf("  3. 查詢圖書信息\n\n"); 
 printf("  4. 修改圖書信息\n\n"); 
 printf("  5. 刪除圖書信息\n\n"); 
 printf("  6. 圖書價格信息排名\n\n"); 
 printf("  0. 退出系統(tǒng)\n\n"); 
 printf("  請選擇(0-6):"); 
 scanf("%d",&choice); 
 switch(choice) 
 { 
 case 1: k=input(stu); break;/*創(chuàng)建圖書信息*/ 
 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(); 
} 

更多學(xué)習(xí)資料請關(guān)注專題《管理系統(tǒng)開發(fā)》。

 以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • QT使用QFile進(jìn)行文件操作

    QT使用QFile進(jìn)行文件操作

    本文主要介紹了QT使用QFile進(jìn)行文件操作,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Qt 事件過濾器的具體實現(xiàn)

    Qt 事件過濾器的具體實現(xiàn)

    事件過濾器,見名之意,就是將事件過濾一遍,將不需要的事件都清除掉,剩下需要的事件進(jìn)行操作。本文詳細(xì)的介紹了Qt 事件過濾器的具體實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • gcc中extra qualification錯誤的解決

    gcc中extra qualification錯誤的解決

    今天小編就為大家分享一篇gcc中extra qualification錯誤的解決,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • C語言中break與continue的用法和區(qū)別詳解

    C語言中break與continue的用法和區(qū)別詳解

    當(dāng)我們使用while或for循環(huán)時,如果想提前結(jié)束循環(huán)(在不滿足結(jié)束條件的情況下結(jié)束循環(huán)),可以使用break或continue關(guān)鍵字,這篇文章主要給大家介紹了關(guān)于C語言中break與continue的用法和區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2021-10-10
  • C語言詳細(xì)分析浮點數(shù)在內(nèi)存中的儲存

    C語言詳細(xì)分析浮點數(shù)在內(nèi)存中的儲存

    我們在日常生活中和編程中都會用到小數(shù),比如:3.1415926、29.9、1E10(科學(xué)計數(shù)法也是浮點型)。在C語言中的浮點型類型有:float,double,long double。那么浮點數(shù)在這些浮點型的內(nèi)存之中又是如何儲存的呢,這就是今天我們要分享的
    2022-06-06
  • C/C++ 多線程的學(xué)習(xí)心得總結(jié)

    C/C++ 多線程的學(xué)習(xí)心得總結(jié)

    本篇文章是對C/C++中多線程的學(xué)習(xí)心得總結(jié)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C++ CopyFile,MoveFile用法案例詳解

    C++ CopyFile,MoveFile用法案例詳解

    這篇文章主要介紹了C++ CopyFile,MoveFile用法案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • C++堆排序算法實例詳解

    C++堆排序算法實例詳解

    這篇文章主要介紹了C++堆排序算法,簡單分析了堆排序算法的原理并結(jié)合實例形式分析了C++實現(xiàn)堆排序的具體操作技巧,需要的朋友可以參考下
    2017-08-08
  • C++ read函數(shù)讀入int整形數(shù)據(jù)

    C++ read函數(shù)讀入int整形數(shù)據(jù)

    這篇文章主要介紹了C++ read函數(shù)讀入int整形數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下
    2016-07-07
  • 詳解C/C++中new?A與new?A()的區(qū)別

    詳解C/C++中new?A與new?A()的區(qū)別

    這篇文章主要通過一些簡單的示例為大家詳細(xì)介紹一下C/C++中new?A與new?A()的區(qū)別,文中的示例代碼簡潔易懂,快跟隨小編一起學(xué)習(xí)起來吧
    2023-07-07

最新評論