最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

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

color [attr]

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

0 = 黑色 8 = 灰色
1 = 藍色 9 = 淡藍色
2 = 綠色 A = 淡綠色
3 = 湖藍色 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。 說明: 當s1<s2時,返回值<0 當s1=s2時,返回值=0 當s1>s2時,返回值>0

3.C語言的文件操作

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

打開文件的語句是

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

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

打開模式有幾種,

r(read): 讀

w(write): 寫

a(append): 追加

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

b(banary): 二進制文件

+: 讀和寫

一般是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ù)組中的學號stu[i].num同輸入要查詢的學號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("  * 歡迎進入圖書信息管理系統(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("首先錄入基本庫存信息!按回車后進入—————\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(); 
} 

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

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

相關(guān)文章

  • C++使用OpenCV實現(xiàn)證件照藍底換成白底功能(或其他顏色如紅色)詳解

    C++使用OpenCV實現(xiàn)證件照藍底換成白底功能(或其他顏色如紅色)詳解

    這篇文章主要介紹了C++使用OpenCV實現(xiàn)證件照藍底換成白底功能(或其他顏色如紅色),結(jié)合實例形式詳細分析了OpenCV顏色轉(zhuǎn)換相關(guān)操作原理與實現(xiàn)技巧,需要的朋友可以參考下
    2019-12-12
  • C語言中如何利用循環(huán)嵌套輸出一個菱形

    C語言中如何利用循環(huán)嵌套輸出一個菱形

    這篇文章主要介紹了C語言中如何利用循環(huán)嵌套輸出一個菱形問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • C++中實現(xiàn)fibonacci數(shù)列的幾種方法

    C++中實現(xiàn)fibonacci數(shù)列的幾種方法

    本文主要介紹了C++中實現(xiàn)fibonacci數(shù)列的幾種方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 使用QPainter畫一個3D正方體

    使用QPainter畫一個3D正方體

    這篇文章主要為大家詳細介紹了使用QPainter畫一個3D正方體,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • MFC程序設(shè)計常用技巧匯總

    MFC程序設(shè)計常用技巧匯總

    這篇文章主要介紹了MFC程序設(shè)計常用技巧,實例匯總了MFC程序設(shè)計中常見的問題與解決方法,非常具有實用價值,需要的朋友可以參考下
    2015-05-05
  • C++使用jsoncpp庫解析Json

    C++使用jsoncpp庫解析Json

    對json的解析操作是我們?nèi)粘i_發(fā)中經(jīng)常會遇到的一個需求,下面這篇文章主要給大家介紹了關(guān)于C++使用jsoncpp庫解析Json的相關(guān)資料,需要的朋友可以參考下
    2021-06-06
  • 詳解C++ 內(nèi)存對齊

    詳解C++ 內(nèi)存對齊

    這篇文章主要介紹了C++ 內(nèi)存對齊的相關(guān)資料,幫助大家更好的理解和使用c++編程語言,感興趣的朋友可以了解下
    2021-01-01
  • C++實現(xiàn)歌手比賽評分系統(tǒng)

    C++實現(xiàn)歌手比賽評分系統(tǒng)

    這篇文章主要為大家詳細介紹了C++實現(xiàn)歌手比賽評分系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Windows上Qt配置OpenCV的詳細教程(避坑必看)

    Windows上Qt配置OpenCV的詳細教程(避坑必看)

    這篇文章詳細介紹了在Windows上使用Qt配置OpenCV的步驟,包括軟件安裝、環(huán)境變量配置、Qt項目配置以及通過創(chuàng)建pri文件簡化OpenCV庫的添加過程,并提供了一個簡單的測試案例來驗證配置是否成功,需要的朋友可以參考下
    2025-02-02
  • 詳解C語言之順序表

    詳解C語言之順序表

    這篇文章主要為大家介紹了C語言的順序表,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-11-11

最新評論

吴桥县| 巩留县| 丹江口市| 寿宁县| 乌拉特中旗| 盖州市| 得荣县| 富顺县| 山阳县| 鸡西市| 长垣县| 惠州市| 华蓥市| 东平县| 信宜市| 张家界市| 武宣县| 怀集县| 抚顺市| 米脂县| 利川市| 满城县| 金阳县| 张家港市| 平罗县| 会同县| 灌云县| 常德市| 修文县| 库尔勒市| 喜德县| 黔东| 郴州市| 延安市| 安阳县| 商洛市| 屯门区| 南丰县| 昌乐县| 阳谷县| 凤台县|