您好,登錄后才能下訂單哦!
C語言將計算機的輸入輸出設備都看作是文件。
那么,如果寫一個字符串到一個文件中,是什么方式呢?顯示到屏幕上是默認的輸出文件,如果是硬盤中的一個文件,首先要打開一個文件,然后才能往里寫,那么就要告訴程序這個文件在什么地方,按照什么樣的方式打開(讀、寫、讀和寫、添加、覆蓋等),然后打開后要給這個打開的文件一個符號(指針變量),表示后續的讀和寫都是針對這個文件的,而不是到屏幕的,這個指針變量以后就代表了文件自身了。
例如學生信息管理系統中,需要同時保存一個學生的姓名,性別,年齡等信息,那么設置變量保存很多同學的這些信息就有點不太方便。類似一個登記本,每一頁只能寫名字,如果你要登記其他的信息,又要添加一個登記本,只能寫性別,如果登記年齡,又要添加一個登記本,只能寫年齡,….,多么的不方便,還容易混亂。解決的方法你一定想,多么簡單,一個登記本一頁中,同時寫姓名,性別,年齡不就行了嗎?C語言也是這樣,如果定義一種形式,一個變量同時記錄很多的信息,這樣在管理系統中,就方便很多了。這就是結構體。
結構體首先要定義,因為每個程序用到的組合在一起的信息不一樣,例如學生信息管理系統中,可能要將學號、姓名、性別、年齡、班級組合到一起,所以 第一行用struct告訴程序,下面是一個結構體,后面的stu是這個結構體的類型,類似整數用int表示,這個stu是你自己起的名字。
如果沒有班級的話,咱們全校學生在一個班里面,可以想象管理會多么混亂。咱們想了一個辦法,把同學按照專業分到不用的班級中,這樣管理起來就方便多了,系里發通知等,只發到班長就行了,由班長向下傳達,班級內部更改活動內容,也跟其他班級沒有關系,自己關起門來修改就可以了。所以程序也是這樣,如果是把所有的代碼都放到一起,那跟全校所有的同學都在一個班級一樣,互相之間相互聯系,程序代碼短還沒有什么問題,程序代碼量一多了,將非常難管理。所以按照功能,將不同的代碼放到一起,用大括號括起來,然后給這段代碼起個名字表示,類似咱們班級的名字,然后還要設置上參數,一遍使用這個函數的時候向里傳遞實際的值,類似一個加法的函數,完成兩個數的相加,我們可以寫成
myadd(int a, int b)
{
intc;
c=a+b;
return c;
}
myadd就是我們給這個函數起的名字,以便使用,a和b的作用接收調用者傳遞過來的數,然后把接收的兩個數相加后返回,這個函數的值在調用后就是返回的值c,所以如果我們想算99+23等于多少,只要調用我們寫好的函數
myadd(99,23),這個時候函數的值就是99+23了,如果把結果保存在變量d中,可以寫成
d=myadd(99,23);
有了函數,我們就可以把不同功能的代碼組織到一起,不僅自己方便,而且程序特別簡單明了,便于修改,其他人寫的函數我們還可以直接拿來用。
所以我們的這個學生信息管理系統形式就非常簡單了,一共用到了三個函數
int main()
{
inti,sum;
pagedis();
check();
menu();
}
第一個是顯示歡迎頁面,第二個是驗證用戶名和口令,第三個是顯示菜單,并根據用戶的輸入選擇執行相應的操作。
還有一些其他的函數,分別是menu()菜單函數調用的子函數。
結構話程序后大概的形式就是這樣
#include<stdio.h>
void pagedis();
void check();
void menu();
int main()
{
pagedis();
check();
menu();
}
void pagedis(){
printf("。。 \n");
}
void check(){
printf("。。 \n");
}
void menu(){
printf(" 。。\n");
}
這就是結構化程序設計,把功能放到函數中,下一步就可以集中精力,完善函數中的內容。
學生成績管理系統:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define SIZE 3 /*定義常量SIZE便于以后的修改*/
struct student /*定義一個結構體數組存放學生的信息*/
{
int number; /*學號*/
char name[20];/*名字*/
char xueyuan[20];/*學院*/
int cla;/*班級*/
int score[3];/*分數*/
int sum;/*總分*/
int average;/*平均分*/
}stu[SIZE];
void menu();/*調用菜單函數*/
void write();/*讀入信息*/
void save(int x);/*保存stud.dat文件函數*/
void SaveOneStudent(int i);/*保存一個學生信息*/
void SaveAllStudent(int n);/*保存全部學生信息*/
void inturn (struct student c[]);/*用于對學生的信息按學號排序的函數*/
void save2();/*將排序后的信息存入student.dat文件中*/
int AddStudent(int n);/*增加學生信息*/
void InputOnestudent(int i);/*輸入一個同學信息*/
int DelStudent(int n);/*刪除學生信息*/
void ModifyStudent(int n);/*修改學生信息*/
void OutputOneStudent(int i);/*查詢一個學生信息*/
void SearchMenu(int n);/*查詢學生信息操作*/
void SearchNumber(int n);/*按學號查詢學生信息*/
void SearchName(int n);/*按姓名查詢學生信息*/
void SearchXueyuan(int n);/*按所在學院查詢學生信息*/
void SearchCla(int n);/*按所在班級查詢學生信息*/
void tongji();/*學生信息統計操作*/
void tongji2();/*統計不及格率操作*/
void zfsc();/*總分排序操作*/
void avecz();/*按平均分統計人數操作*/
void avecz();/*按平均分統計人數操作*/
void search();/*查找最高成績操作*/
void tongji2();/*統計不及格率操作*/
void read();/*讀取student.dat文件文件中學生的信息*/
/*主函數************************************************************************************/
void main()
{
int n=SIZE;
int choice;/*用戶選擇變量*/
printf("*******************************************************************************\n");
printf("* *\n");
printf("* Hwadee &學生成績文件管理& Hwadee *\n");
printf("* *\n");
printf("*******************************************************************************\n\n\n");
printf("******************************●●歡迎使用●●*********************************");
while (1)
{
menu();/*調用菜單函數形成操作界面*/
printf("請選擇:");
scanf("%d", &choice);
if ( choice==0 )
{
printf("\t\t\t\t謝謝使用!!!");
break;
}
switch(choice) /*多重選擇實現功能不同的功能*/
{
case 1:
write();
inturn(stu);
save(SIZE);
break;
case 2:
AddStudent(n);
break;
case 3:
DelStudent(n);
break;
case 4:
ModifyStudent(n);
break;
case 5:
SearchMenu(n);
break;
case 6:
tongji();
break;
case 0:
printf("\n謝謝使用!再見!\n");
default:
printf("\n按鍵錯誤!請重新選擇!\n");
}/*結束switch*/
}/*結束while*/
}
部分程序清單
/*菜單函數*************************************************************************************/
void menu()
{
printf("************請輸入所需操作***********\n");/*選擇功能菜單*/
printf("*************************************\n");
printf("1.學生成績寫入及排序\n");
printf("2.增加學生信息\n");
printf("3.刪除學生信息\n");
printf("4.修改學生信息\n");
printf("5.查詢學生信息\n");
printf("6.學生成績統計操作\n");
printf("0.退出系統\n");
printf("**************************************\n");
}
/*寫入函數*************************************************************************************/
void write()
{
int i;/*計數變量*/
for(i=0;i<SIZE;i++)
{
printf("學號:");
scanf("%d",&stu[i].number);
printf("姓名:");
scanf("%s",&stu[i].number);
printf("學院:");
scanf("%s",&stu[i].xueyuan);
printf("班級:");
scanf("%d",&stu[i].cla);
printf("高數:");
scanf("%d",&stu[i].score[0]);
printf("英語:");
scanf("%d",&stu[i].score[1]);
printf("C語言:");
scanf("%d",&stu[i].score[2]);
stu[i].sum=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2]);/*計算總成績*/
printf("總成績:%d",stu[i].sum);
stu[i].average=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3;/*計算平均成績*/
printf("平均成績:%d\n",stu[i].average);
}
}
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。