C程序中,如何設計和編寫一個應用系統(tǒng)?
專注于為中小企業(yè)提供做網站、成都網站建設服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)綏棱免費做網站提供優(yōu)質的服務。我們立足成都,凝聚了一批互聯(lián)網行業(yè)人才,有力地推動了上1000+企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網站建設實現(xiàn)規(guī)模擴充和轉變。
一、 C語言文件的操作
1、 文件操作的基本方法:
C語言將計算機的輸入輸出設備都看作是文件。例如,鍵盤文件、屏幕文件等.
向屏幕輸出一個信息,例如“Hello”是
#include.h>
int main()
{
printf("Hello\\\\n");
}
從鍵盤接收一個字符串然后顯示是
#include.h>
int main()
{
char a[10];
scanf("%s",&a);
printf("%s \\\\n",a);
}
那么,如果寫一個字符串到一個文件中,是什么方式呢?顯示到屏幕上是默認的輸出文件,如果是硬盤中的一個文件,首先要打開一個文件,然后才能往里寫,那么就要告訴程序這個文件在什么地方,按照什么樣的方式打開(讀、寫、讀和寫、添加、覆蓋等),然后打開后要給這個打開的文件一個符號(指針變量),表示后續(xù)的讀和寫都是針對這個文件的,而不是到屏幕的,這個指針變量以后就代表了文件自身了。
定義一個代表文件的符號(指針變量)這樣的形式
FILE *fp;
其中FILE是固定的寫法,后面的是指針變量名,可以隨意起。
這個時候fp還是一個空的指針變量,什么也沒有代表,類似一個倉庫里的貨架的標簽,什么也沒有寫。
然后讓這個指針變量指向一個文件,就是打開一個文件,然后讓這個指針變量指向這個打開的文件,后續(xù)對這個指針變量的操作就都是對這個文件的操作了。
打開文件的語句是
fopen(文件位置,打開模式);
文件位置好理解,就是文件所在的位置,例如c://test.txt
打開模式有幾種,
r(read): 讀
w(write): 寫
a(append): 追加
t(text): 文本文件,可省略不寫
b(banary): 二進制文件
+: 讀和寫
一般是rt+,也可以寫成r+,和w+,就是讀和寫,能保留原來的內容。
所以打開C盤下my目錄中的文件c:\\\\my\\\\test.txt的語句是
fp=fopen("c://my/test.txt","r+");
注意文件夾符號同上面的不同。
這個時候如果打開的文件出問題的話,往一個空指針里面寫東西是比較危險的,很容易把系統(tǒng)弄崩潰了。所以在后續(xù)的讀寫操作前,最好測試一下,打開文件后這個文件指針fp是否還是空的,如果是空的話,就不能往下執(zhí)行了。所以語句變成了這樣
if((fp=fopen(" c://my/test.txt ","r+")) == NULL)
{
printf("文件沒有正確打開,不能往下執(zhí)行了. \\\\n");
exit(1);
}
完整的程序成了這樣
#include.h>
int main()
{
FILE *fp;
if((fp=fopen("c://my/test.txt","r+"))==NULL)
{
printf("文件沒有正確打開,不能往下執(zhí)行了. \\\\n");
return(1);
}
}
你會看到,程序報錯,因為沒有my這個目錄,所以你要在C盤下先建立一個my目錄,然后建立一個test.txt文件?;蛘吣愦蜷_方式選擇寫和讀,如果沒有目錄或者文件的話,程序會自動幫你建一個文件。就是這樣
if((fp=fopen("c://my/test.txt","w+"))==NULL)
有時間自己可以百度一下C語言打開文件的類型,功能非常豐富。
然后就可以用前面的輸入和輸出語句,向文件中寫內容了,同咱們上學期學的是一致的,就是在printf和scanf前面加f,成為fprint和fscanf,表示向文件輸出和從文件輸入,不是向屏幕輸出和從鍵盤輸入。
下面的程序實現(xiàn)了從鍵盤輸入一個字符,然后寫到文件中。
#include.h>
int main()
{
char a[20];
char b[20];
printf("請輸入一個字符串(小于20個字符),寫到c://my/test.txt中 \\\\n");
scanf("%s",&a);
FILE *fp;
if((fp=fopen("c://my/test.txt","w+"))==NULL)
{
printf("文件沒有正確打開,不能往下執(zhí)行了. \\\\n");
return(1);
}
fprintf(fp,"%s",a);
fclose(fp);
}
執(zhí)行完后,你打開文件看看,你寫的字符是否寫進去了?
然后,你在記事本中在文件中寫一個字符串,例如你的名字,然后用fscanf讀出來,而不用在屏幕上輸入了。
#include.h>
int main()
{
char a[20];
FILE *fp;
if((fp=fopen("c://my/test.txt","r+"))==NULL)
{
printf("文件沒有正確打開,不能往下執(zhí)行了. \\\\n");
return(1);
}
fscanf(fp,"%s",&a);
printf("%s \\\\n",a);
fclose(fp);
}
讀取文件的時候有個指針,保證按照順序依次往下讀,如果讀到頭了想從頭再來,類似看書一頁頁讀完了想到頭上重新操作,用函數(shù)rewind(fp)就可以了,如果想定位到某個位置,類似將書翻到某一頁,用fseek(fp,偏移量,基準),就是在基準(0代表文件頭,1代表當前位置,2代表文件尾)的基礎上便宜多少。
這就是基本的文件的讀寫語句。有了文件的讀寫后,才能進行管理系統(tǒng)的開發(fā),因為你的很多信息要存放到文件中才行,否則在程序中,關機后數(shù)據(jù)就沒有了。
2、 能存儲多個信息的結構體和結構體變量
上學期學過,一個變量可以保存一個數(shù)據(jù),例如
int a; double b; char c[20];
則a可以保存一個整數(shù),b可以保存一個實數(shù),c可以保存一串字符(字符串)。
但是如果一個系統(tǒng)中,例如學生信息管理系統(tǒng)中,需要同時保存一個學生的姓名,性別,年齡等信息,那么設置變量保存很多同學的這些信息就有點不太方便。類似一個登記本,每一頁只能寫名字,如果你要登記其他的信息,又要添加一個登記本,只能寫性別,如果登記年齡,又要添加一個登記本,只能寫年齡,….,多么的不方便,還容易混亂。解決的方法你一定想,多么簡單,一個登記本一頁中,同時寫姓名,性別,年齡不就行了嗎?C語言也是這樣,如果定義一種形式,一個變量同時記錄很多的信息,這樣在管理系統(tǒng)中,就方便很多了。這就是結構體。
結構體首先要定義,因為每個程序用到的組合在一起的信息不一樣,例如學生信息管理系統(tǒng)中,可能要將學號、姓名、性別、年齡、班級組合到一起,所以 第一行用struct告訴程序,下面是一個結構體,后面的stu是這個結構體的類型,類似整數(shù)用int表示,這個stu是你自己起的名字。
typedef stu
{ int num;/*學號*/
char name[20];/*姓名*/
char sex[5];/*性別*/
int age;/*年齡*/
char sclass[20];/*班級*/
};
這個結構體中,包括了5個變量。
這樣就有了一個新的變量類型,stu,這個變量類型是你自己定義的,同int,float是一樣的。
如果定義一個整數(shù)變量a,你一定知道是
int a;
a=3;
那個定義一個你自己定義的stu類型的變量a,這樣的形式,其中前面的struct告訴編譯程序,這個stu是你自己定義的結構體類型,后面的a就是一個結構體變量了。
struct stu a;
但是賦值的時候,因為這個時候的a,代表了很多的信息,有num,name,sex,class,就是a中實際上是包括了很多的變量,那么怎么賦值呢?用點運算符”.”,就是a.num,a.name,a.sex,a.class,這個道理類似剛才提到的記錄本每一頁記錄很多信息,這個a就代表1頁紙,里面有很多信息欄,這一頁紙的學號欄就用a.num表示,其他類似。如果有很多學生怎么辦呢?那就多設置幾個stu類型的變量,例如a1,a2,a3…就行放很多同學的信息,你一定想到,這不是一個好辦法,因為信息都一樣,有就是登記本每一頁的格式都是一樣的,這種方式適合用數(shù)組,
stu a[80];
這樣,分別用a[0],a[1],a[2],…就可以存放至多到80個同學的信息了。
所以程序可以這樣
#include.h>
struct stu
{ int num; /*學號*/
char name[20];/*姓名*/
char sex[5];/*性別*/
int age;/*年齡*/
char sclass[20];/*班級*/
};
int main()
{
struct stu a;
printf("依次輸入學號,姓名,性別,年齡,班級,用回車分割,系統(tǒng)會顯示輸入的內容 \\\\n");
scanf("%d%s%s%d%s",&a.num,&a.name,&a.sex,&a.age,&a.sclass);
printf("以下是剛才輸入的信息保存到stu類型變量a中后的結果 \\\\n");
printf("%d%s%s%d%s",&a.num,&a.name,&a.sex,&a.age,&a.sclass);
}
現(xiàn)在你已經很有進步了,可以用一個變量存儲很多信息了。
3、 函數(shù)的應用和結構化程序設計
如果沒有班級的話,咱們全校學生在一個班里面,可以想象管理會多么混亂。咱們想了一個辦法,把同學按照專業(yè)分到不用的班級中,這樣管理起來就方便多了,系里發(fā)通知等,只發(fā)到班長就行了,由班長向下傳達,班級內部更改活動內容,也跟其他班級沒有關系,自己關起門來修改就可以了。所以程序也是這樣,如果是把所有的代碼都放到一起,那跟全校所有的同學都在一個班級一樣,互相之間相互聯(lián)系,程序代碼短還沒有什么問題,程序代碼量一多了,將非常難管理。所以按照功能,將不同的代碼放到一起,用大括號括起來,然后給這段代碼起個名字表示,類似咱們班級的名字,然后還要設置上參數(shù),一遍使用這個函數(shù)的時候向里傳遞實際的值,類似一個加法的函數(shù),完成兩個數(shù)的相加,我們可以寫成
myadd(int a, int b)
{
int c;
c=a+b;
return c;
}
myadd就是我們給這個函數(shù)起的名字,以便使用,a和b的作用接收調用者傳遞過來的數(shù),然后把接收的兩個數(shù)相加后返回,這個函數(shù)的值在調用后就是返回的值c,所以如果我們想算99+23等于多少,只要調用我們寫好的函數(shù)
myadd(99,23),這個時候函數(shù)的值就是99+23了,如果把結果保存在變量d中,可以寫成
d=myadd(99,23);
有了函數(shù),我們就可以把不同功能的代碼組織到一起,不僅自己方便,而且程序特別簡單明了,便于修改,其他人寫的函數(shù)我們還可以直接拿來用。
所以我們的這個學生信息管理系統(tǒng)形式就非常簡單了,一共用到了三個函數(shù)
int main()
{
int i,sum;
pagedis();
check();
menu();
}
第一個是顯示歡迎頁面,第二個是驗證用戶名和口令,第三個是顯示菜單,并根據(jù)用戶的輸入選擇執(zhí)行相應的操作。
還有一些其他的函數(shù),分別是menu()菜單函數(shù)調用的子函數(shù)。
結構話程序后大概的形式就是這樣
#include.h>
void pagedis();
void check();
void menu();
int main()
{
pagedis();
check();
menu();
}
void pagedis(){
printf("我是顯示歡迎界面的模塊,具體內容還要再完善! \\\\n");
}
void check(){
printf("我是驗證用戶合法性的模塊,具體內容還要再完善! \\\\n");
}
void menu(){
printf("我是引導用戶執(zhí)行各個功能的模塊,具體內容還要再完善! \\\\n");
}
這就是結構化程序設計,把功能放到函數(shù)中,下一步就可以集中精力,完善函數(shù)中的內容。
4、 顯示歡迎頁界面
首先完善顯示歡迎頁的界面,這個就是printf(“….”)函數(shù)顯示字符串,但是要注意用空格和”\\\”位置定位,使得顯示界面美觀。
void pagedis()
{
printf(" \\\\n\\\\n\\\\n **********************************\\\\n");
printf(" * *\\\\n");
printf(" * *\\\\n");
printf(" * *\\\\n");
printf(" * 歡迎進入學生信息管理系統(tǒng) *\\\\n");
printf(" * *\\\\n");
printf(" * *\\\\n");
printf(" * *\\\\n");
printf(" **********************************\\\\n");
}
5、 用戶安全認證
這個函數(shù)中,用到了gets()函數(shù),從鍵盤接收一個字符,還有strcmp(字符串1,字符串2),比較兩個字符串是否一致,注意不能用”==”來判斷兩個數(shù)組是否相等,只能用”==”判斷數(shù)組的元素是否相等。
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("連續(xù)3次輸錯用戶名或密碼,退出系統(tǒng)。");
printf("您已連續(xù)3次將用戶名或密碼輸錯,系統(tǒng)將退出!");
exit(1);
}
}
}
}
網站標題:c語言中如何設計和編寫一個應用系統(tǒng)?
文章網址:http://www.rwnh.cn/article10/igpcgo.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供建站公司、外貿建站、營銷型網站建設、用戶體驗、網站營銷、App設計
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)