您好,登錄后才能下訂單哦!
C語言程序設計報告
經過上次的飛機游戲制作,使我感覺到C語言程序設計,更加的有趣,也使我對這門課程有了更深的理解和認識。這次我們學習了學習C語言操作文件永久保存數據和基于函數的結構化大型程序的編寫方法。這次的學習也比較上次來說顯得有些復雜。
這次要做的是一個關于書本的管理系統。可以讓我們更加方便的去利用程序查找書本存放的位置和一些基本的信息。
首先建立基本的函數公式:
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#include"conio.h"
#define PAGE 3
#define MAX 1000
#define N 5
int k=0;
/*結構體類型*/
然后定義我們所要設計和查找的變量:
typedef struct
{ int num;/*書號*/
char name[50];/*名稱*/
char type[40];/*類型*/
int time;/*出版時間*/
char place[50];/*位置*/
char writer[50];/*作者*/
}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 錄入書本信息\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].type);
printf("\n 請輸入書本的出版時間:");
scanf("%d",&stu[k].time);
printf("\n 請輸入書本的位置:");
scanf("%s",stu[k].place);
printf("\n 請輸入書本的作者:");
scanf("%s",stu[k].writer);
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,出版時間:%d,位置:%s,作家: %s\n",stu[i].num,stu[i].name,
stu[i].type,stu[i].time,stu[i].place,stu[i].writer);
printf("按任意鍵加回車返回主菜單!");
scanf("%d",&i);
getchar();
}
輸入、刪除、打印都完成了,接下來便是最關鍵的一步:查找。這一步相對于之前的幾步來說算是最簡單的了只需要把存入庫中的數據輸出即可:
void inquire(STUDENTS stu[])
{ int i;
int num;
system("cls");
printf(" \n\n請輸入您要查找的書本的編號");
scanf("%d",&num);
for(i=0;i<k;i++)
if(num==stu[i].num)
printf("\n\n\n編號:%d,名稱:%s,類型:%s,出版時間:%d,位置:%s,作者: %s\n",stu[i].num,stu[i].name,
stu[i].type,stu[i].time,stu[i].place,stu[i].writer);
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,出版時間:%d,位置:%s,作者: %s\n",stu[i].num,stu[i].name,
stu[i].type,stu[i].time,stu[i].place,stu[i].writer);
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].type);
break;
}
case 4:{
printf("\n 請輸入你改的新出版時間");
scanf("%d",&stu[i].time);
break;
}
case 5:{
printf("\n 請輸入你改的新位置");
scanf("%s",stu[i].place);
break;
}
case 6:{
printf("\n 請輸入你改的新作家");
scanf("%s",stu[i].writer);
break;
}
}
printf("編號:%d,名稱:%s,類型:%s,出版時間:%d,位置:%s,作者: %s\n",stu[i].num,stu[i].name,
stu[i].type,stu[i].time,stu[i].place,stu[i].writer);
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].time<stu[j].time)
{ t=stu[i].time;
stu[i].time=stu[j].time;
stu[j].time=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 %d %d\n",n++,stu[i].num,stu[i].name,stu[i].time);
printf("按任意鍵加回車返回主菜單!");
scanf("%d",&x);
getchar();
}
最后我們要裝飾一下我們的主頁面使其更美觀:
void pagedis()
{
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 4E");
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("用戶名和密碼正確,顯示主菜單");
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;
pagedis();
check();
menu();
}
關于這次的感想:這次的課程使我對C語言這個程序更加的刮目相看,沒想到平常的那些看起來十分高級的查找系統也是通過這些基礎的軟件一點一點制作而成的。看起來復雜的東西只要拆開就會發現它十分的簡單易懂。
下面是這次整個程序的完整程序:
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#include"conio.h"
#define PAGE 3
#define MAX 1000
#define N 5
int k=0;
/*結構體類型*/
typedef struct
{ int num;/*書號*/
char name[50];/*名稱*/
char type[40];/*類型*/
int time;/*出版時間*/
char place[50];/*位置*/
char writer[50];/*作者*/
}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 錄入書本信息\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].type);
printf("\n 請輸入書本的出版時間:");
scanf("%d",&stu[k].time);
printf("\n 請輸入書本的位置:");
scanf("%s",stu[k].place);
printf("\n 請輸入書本的作者:");
scanf("%s",stu[k].writer);
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,出版時間:%d,位置:%s,作家: %s\n",stu[i].num,stu[i].name,
stu[i].type,stu[i].time,stu[i].place,stu[i].writer);
printf("按任意鍵加回車返回主菜單!");
scanf("%d",&i);
getchar();
}
/*查詢書本信息*/
void inquire(STUDENTS stu[])
{ int i;
int num;
system("cls");
printf(" \n\n請輸入您要查找的書本的編號");
scanf("%d",&num);
for(i=0;i<k;i++)
if(num==stu[i].num)
printf("\n\n\n編號:%d,名稱:%s,類型:%s,出版時間:%d,位置:%s,作者: %s\n",stu[i].num,stu[i].name,
stu[i].type,stu[i].time,stu[i].place,stu[i].writer);
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,出版時間:%d,位置:%s,作者: %s\n",stu[i].num,stu[i].name,
stu[i].type,stu[i].time,stu[i].place,stu[i].writer);
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].type);
break;
}
case 4:{
printf("\n 請輸入你改的新出版時間");
scanf("%d",&stu[i].time);
break;
}
case 5:{
printf("\n 請輸入你改的新位置");
scanf("%s",stu[i].place);
break;
}
case 6:{
printf("\n 請輸入你改的新作家");
scanf("%s",stu[i].writer);
break;
}
}
printf("編號:%d,名稱:%s,類型:%s,出版時間:%d,位置:%s,作者: %s\n",stu[i].num,stu[i].name,
stu[i].type,stu[i].time,stu[i].place,stu[i].writer);
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].time<stu[j].time)
{ t=stu[i].time;
stu[i].time=stu[j].time;
stu[j].time=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 %d %d\n",n++,stu[i].num,stu[i].name,stu[i].time);
printf("按任意鍵加回車返回主菜單!");
scanf("%d",&x);
getchar();
}
void pagedis()
{
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 4E");
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("用戶名和密碼正確,顯示主菜單");
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;
pagedis();
check();
menu();
}
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。