中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

c語言中如何設計和編寫一個應用系統(tǒng)?

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)

成都定制網站網頁設計
沽源县| 武夷山市| 万州区| 宝兴县| 沁水县| 社旗县| 平凉市| 油尖旺区| 柞水县| 伊金霍洛旗| 贵州省| 琼结县| 松溪县| 昂仁县| 贞丰县| 渭源县| 潼南县| 聂拉木县| 广东省| 建德市| 大新县| 贺州市| 哈巴河县| 永顺县| 曲周县| 石屏县| 许昌市| 岱山县| 波密县| 阿城市| 霍邱县| 讷河市| 许昌市| 石屏县| 凌海市| 上杭县| 攀枝花市| 满洲里市| 兴城市| 芮城县| 麟游县|