久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

C++程序設計—電話簿管理系統

時間:2019-05-14 03:02:05下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關的《C++程序設計—電話簿管理系統》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《C++程序設計—電話簿管理系統》。

第一篇:C++程序設計—電話簿管理系統

XXXXXXXXXXXC/C++程序設計實訓

電話簿管理系統

學生姓名 ×××× 學 號 ×××× 所在學院 ×××× 專業名稱 ×××× 班 級 ×××× 指導教師

XXX

XXXXXXXXXXXXXXXX XXXXXXXXXXXX

目 錄

1.前言··················································································································· 3 2.設計目的··········································································································· 3 3.功能描述··········································································································· 3 4.總體設計··········································································································· 4

1、功能模塊設計···························································································· 4

2、數據結構設計···························································································· 6

3、函數功能描述···························································································· 7 5.程序實現··········································································································· 7

1、源程序(略)···························································································· 7

2、運行結果···································································································· 7 6.小結··················································································································· 9

1.前言

隨著科技的進步和信息產業的飛速發展,電話簿成為了現代生活中一個重要的工具。本電話簿管理系統利用計算機對通訊錄進行統一管理,包括添加、修改、查詢記錄等功能,實現通訊錄管理工作的系統化、規范化和自動化,為人們的工作和生活提供便利。本程序是利用結構數組實現此電話簿管理系統。

2.設計目的

本程序旨在訓練基本編程能力,了解管理信息系統的開發流程,熟悉C語言的文件和結構數組的各種基本操作。本程序中涉及結構體、數組、文件等方面的知識。通過本程序的訓練,能對C語言的文件操作有一個更深刻的了解,掌握利用數組存儲結構實現電話簿管理的原理,為進一步開發出高質量的信息管理系統打下堅實的基礎。

3.功能描述

如圖1所示,電話簿管理系統主要利用數組來實現,其數組元素是結構體類型,整個系統由如下幾大功能模塊組成。

電話簿管理系統輸入記錄模塊查詢記錄模塊更新記錄模塊輸出記錄模塊從文件讀入從鍵盤讀入按姓名查詢按電話查詢修改記錄刪除記錄插入記錄排序記錄輸出至文件輸出至屏幕(1)輸入記錄模塊。輸入記錄模塊主要完成將數據存入數組中的工作。在此電話簿管理系統中,記錄可以從以文本形式存儲的數據文件中讀入,也可從鍵盤逐個輸入記錄。記錄由與聯系人有關的基本信息字段構成。當從數據文件中讀入記錄時,它就是在以記錄為單位存儲的數據文件中,將記錄逐條復制到結構體類型的數組元素中。

(2)查詢記錄模塊。查詢記錄模塊主要完成在數組中查找滿足相關條件的記錄。在此電話簿管理系統中,用戶可以按照聯系人姓名或聯系人電話號碼在數組中進行查找。若找到該記錄,則以表格形式打印出此記錄的信息;否則,返回一個-1的值,并打印出未找到該記錄的提示信息。

(3)更新記錄模塊。更新記錄模塊主要完成對記錄的維護。在此電話簿管理系統中,它實現對記錄的修改、刪除、插入和排序操作。一般而言,系統進行了這些操作之后,需要將修改的數據存入源數據文件。

(4)輸出記錄模塊。輸出記錄模塊主要完成兩個任務。第一,它實現對記錄的存盤操作,即將數組中各元素中存儲的記錄信息寫入數據文件中。第二,它實現將數組中存儲的記 圖1 電話簿管理系統功能模塊 錄信息以表格的形式在屏幕上打印顯示出來。

4.總體設計

1、功能模塊設計

(1)主控main()函數執行流程

電話簿管理系統執行主流程如圖2所示。它先以可讀寫的方式打開文本類型的數據文件,此文件默認為“c:telephon”,若該文件不存在,則新建此數據文件。當打開文件操作成功后,從文件中一次讀出一條記錄,添加到新建的數組中,然后執行顯示主菜單和進入主循環操作,進行按鍵判斷。值得一提的是,文本類型文件與二進制類型文件不同,它可以使用Windows自帶的記事本打開并查看到存儲的文件內容。

開始以可讀寫的方式打開一個數據文件將此文件的內容讀出,并存入一個新的結構體類型的數組中調用emnu()菜單函數進入while(1)主循環輸入0~8中的一個數值,選擇相應操作輸入是否為0?是否判斷鍵值,調用相應函數,完成相應功能是否已對修改進行了存盤?否調用Save()函數,進行寫數據文件操作是結束

圖2 主控函數執行流程圖

在判斷鍵值時,有效的輸入為0-8之間的任意數值,其他輸入都被視為錯誤按鍵。若輸入為0(即變量select=0),則會繼續判斷是否在對記錄進行了更新操作之后進行了存盤操作,若未存盤,則全局變量saveflag=1,系統會提示用戶是否需要進行數據存盤操作,用戶輸入 Y或y,系統會進行存盤操作。最后,系統執行退出電話簿管理系統的操作。

若選擇1,則調用Add()函數,執行增加記錄操作;若選擇2,則調用Disp()函數,執行將記錄以表格形式打印輸出至屏幕的操作;若選擇3,則調用Del()函數,執行刪除記錄操作;若選擇4,則調用Qur()函數,執行查詢記錄操作:若選擇5,則調用Modify()函數,執行修改記錄操作;若選擇6,則調用lnsert()函數,執行插入記錄操作;若選擇7,則調用SelectSort()函數,執行按升序排序記錄的操作;若選擇8,則調用Save()函數,執行將記錄存入磁盤中的數據文件的操作:若輸入為0-8之外的值,則調用Wrong()函數,給出按鍵錯誤的提示。

(2)輸入記錄模塊

輸入記錄模塊主要實現將數據存入數組中。當從數據文件中讀出記錄時,它調用fread(&tele[count],sizeof(TELEBOOK), l,fp)文件讀取函數,執行一次從文件中讀取一條電話簿記錄信息存入某個數組元素中的操作,并且這個操作在main()中調用執行,即在電話簿管理系統進入顯示菜單界面時,該操作己經執行了。若該文件中沒有數據,則系統會提示數組為空,沒有任何記錄可操作,此時,用戶應選擇1,調用Add()函數,進行記錄的輸入,即完成在數組中添加元素的操作。

(3)查詢記錄模塊

查詢記錄模塊主要實現在數組中按聯系人姓名或電話查找滿足條件的記錄。在查詢函數Qur()中,為了遵循模塊化編程的原則,對在數組中進行的記錄定位操作設計成了一個單獨的函數int Locate(TELEBOOK temp[],int n,char findmess[],char nameorphonenum[]),參數findmess[]保存要查找的具體內容,nameorphonenum[]保存要查找的字段(值為字特串類型的name或phonenum),若找到該記錄,則返回指向該記錄的數組元素的下標;否則,返回一個-1的值。

(4)更新記錄模塊

更新記錄模塊主要實現了對記錄的修改、刪除、插入和排序操作。因為記錄是以數組的結構形式存儲的,所以這些操作都在數組中完成。下面分別介紹這4個功能模塊。

1)修改記錄

修改記錄操作需要對數組中目標元素的數據域中的值進行修改,它分兩步完成。第一步,輸入要修改的聯系人姓名,輸入后調用定位函數Locate()在數組中逐個對聯系人姓名字段的值進行比較,直到找到該聯系人姓名的記錄;第二步,若找到該記錄,修改除記錄編號之外的各字段的值,并將存盤標記變saveflag置1,表示已經對記錄進行了修改,但還未執行存盤操作。

2)刪除記錄

刪除記錄操作完成刪除指定聯系人姓名或電話號碼的記錄,它也分兩步完成。第一步,輸入要修改的聯系人姓名或電話號碼,輸入后調用定位函數Locate()在數組中逐個對聯系人姓名或電話號碼字段的值進行比較,直到找到該聯系人姓名或電話號碼的記錄,返回指向該記錄的數組元素下標;第二步,若找到該記錄,則從該記錄所在元素的后續元素起,依次向前移一個元素位置,有值的數組元素個數減1,其具體過程如圖3所示,在刪除了數組元素A2后,數組元素A3和A4向前移動了一個位置

A0刪除A2前A0刪除A2后A1A1A2A3A3A4A4

圖3 數組中刪除記錄示意圖

3)插入記錄 插入記錄操作完成在指定記錄編號的隨后位置插入新的記錄。首先,它要求用戶輸入某個記錄編號,新的記錄將插入在該記錄之后、然后,提示用戶輸入一條新的記錄的信息,這些信息保存在新結構體類型的數組元素的各字段中;最后,將該元素插入在已經確認位置的記錄編號之后。它的具體插入執行過程如圖4所示,新元素B1準備插入至已有5個元素的數組中,插入位置為元素A2之后。這具體過程為:先調用Locate()函數找到A2在數組中的下標,從A4開始,往后移動,至A2停止移動,然后在原A3的位置插入元素B1。

插入B1A0插入B1前A0插入B1后A1A2B1A3A4A1A2A3A4

圖4 數組中插入記錄示意圖

4)排序記錄

選擇排序法也屬于內部排序法中的一種,它是運用字段值比較后,從欲排序的數組元素中,按指定規則選出其字段值最小的元素,并依原則交換數組元素位置后,更新欲排序的數組元素,以達到排序的目的。這里我們采用這種排序法來實現按照記錄編號或聯系人姓名字段的值從低到高對記錄進行升序排序。對按照記錄編號排序方式而言,我們將按其數值大小來排序;對按照聯系人姓名排序方式而言,我們將按其姓名字符ASCII碼的大小來排序。

選擇排序的方法為:從欲排序的n個數組元素中,以線性查找的方式找出最小的元素和第一個元素交換,再從剩下的(n-1)個數組元素中,找出最小的元素和第二個元素交換,以此類推,直到所有元素均已排序完成。

將相鄰的兩個數組元素的電話簿字段的值進行比較,若左邊的值小于右邊的值,則將此兩個元素的值進行交換;若左邊的值大于等于右邊的值,則此兩個值的位置不變。右邊的值繼續和下一個值做比較,重復此動作,直到比較到最后一個值,最終實現了升序排序。選擇排序法是最簡單的排序法,但選擇排序法所需的排序時間比其他排序法長。

(5)輸出記錄模塊

當把記錄輸出至文件時,調用fwrite(&temp[i],sizeof(TELEBOOK),L,fp)函數,將數組元素temp[i ]中各字段的值,寫入文件指針fp所指的文件:當把記錄輸出至屏幕時,調用void Disp()函數,將數組中存儲的記錄信息以表格的形式在屏幕上打印出來。

2、數據結構設計

本程序定義了結構體telebook,用于存放聯系人的基本信息。這里僅有3 個與聯系人有關的字段,讀者可以按照需要擴展相關字段。

typedef struct telebook { char num[4];char name[10];char phonenum[15];char address[20];}TELEBOOK;其各字段的值的含義如下: ? num[4]:保存記錄編號。? name[10]:保存聯系人姓名。? phonenum[15]:保存聯系人的電話號碼。? address[20]:保存聯系人地址。

3、函數功能描述

1)printheader()函數原型:void printheader()printheader()函數用于在表格形式顯示記錄時,打印輸出表頭信息。2)printdata()函數原型:void printdata(TELEBOOK pp)printdatan()數用于以表格顯示的方式,打印輸出單個數組元素pp中的記錄信息。3)Disp()函數原型:void Disp(TELEBOOK temp[],int n)Disp()函數用于顯示temp數組中存儲的n條記錄,內容為telebook結構中定義的內容。其余函數功能描述省略,請同學們在自己寫的時候寫完整。

5.程序實現

1、源程序(略)

2、運行結果

(1)主界面

圖5 主界面

當用戶剛進入電話簿管理系統時,其主界面如圖5所示。此時,系統己經將“c:telephon”文件打開,若文件不為空,則將數據從文件中逐條記錄讀出,并寫入數組中。用戶可選擇0-8之間的數值,調用相應功能進行操作。當輸入為0時,退出此管理系統。

(2)輸入記錄

當用戶輸入1并按Enter鍵后,即可進入數據輸入界面。其輸入記錄過程如圖6所示,這里輸入了3條記錄。當用戶輸入為0的記錄編號時,它會結束輸入過程,返回到主菜單界面。

(3)顯示記錄

當用戶執行了輸入記錄或已經從數據文件中讀取了記錄之后,即可輸入2并按Enter鍵,查看當前數組中的記錄情況,如圖7所示,此時表中有3條記錄。

圖6 輸入記錄

圖7 顯示記錄

(4)刪除記錄

當用戶輸入3并按Enter鍵后,即可進入記錄刪除界面。其刪除記錄過程如圖8所示,這里按聯系人姓名刪除了一條姓名為A1的記錄。

圖8 刪除記錄

(5)查找記錄

當用戶輸入4并按Enter鍵后,即可進入記錄查找界面。其查找記錄過程如圖9所示,8 用戶可按姓名或電話號碼進行記錄查找。

圖9 查找記錄

(6)修改記錄

當用戶輸入5并按Enter鍵后,即可進入記錄修改界面。其修改記錄過程如圖10所示,這里修改了姓名為a2的聯系電話和地址字段。

圖11 修改記錄

(7)插入記錄

當用戶輸入6并按Enter鍵后,即可進入記錄插入界面。其插入過程如圖11所示,這里在記錄編號為3的記錄后插入了一條記錄編號為5的記錄。

(8)排序記錄

當用戶輸入7并按Enter鍵后,即可進入記錄排序界面。用戶可以選擇按照記錄編號或聯系人姓名進行排序,圖12為按記錄編號進行記錄升序排序的結果。

(9)保存記錄

當用戶輸入8并按Enter鍵后,即可進入記錄保存界面。其保存結果提示信息如圖13所示,這里有3條記錄已經存儲至磁盤數據文件c:telephon中。

6.小結

本文介紹了電話簿管理系統的設計思路及其編程實現,重點介紹了功能模塊的設計原理和利用數組存儲結構實現電話簿管理的過程。通過本程序的開發使我熟悉C語言下的文件和數組操作,了解管理信息系統(MIS)的開發原理,并注意利用選擇排序法來實現數組元素 排序的特點。

利用本電話簿管理系統可以對通訊錄進行日常維護和管理。

第二篇:C++課程設計電話簿管理

C++課程設計

————簡單電話簿管理

報告內容: 一.程序功能簡介 二.課程設計要求 三.課程設計說明 四.參考數據結構 五.具體功能及實現六.源程序及注釋 七.感想與心得

學號:050930109 姓名:陳浩 指導老師:臧洌 日期:2010年6月20日

一.程序功能簡介

一個基本的電話簿管理程序,具有插入、刪除、顯示、修改和查詢聯系人電話碼的功能。主菜單如右圖所示,每個菜單項功能如下:

1.增加記錄菜單:請輸入用戶姓名,如果該用戶已經存在則添加失敗,否則,輸入用戶的電話號碼,進行添加。

2.修改某條記錄:請輸入用戶姓名,如果沒有該用戶顯示“ 該用戶不存在”信息,否則,輸出原電話號碼,然后輸入新的電話號碼,進行修改。3.刪除記錄:

輸入用戶姓名,進行刪除(刪除時要進行確認)。4.查詢:輸入用戶姓名,進行查找。

5.排序:根據子菜單,選擇不同的排序方式。6.顯示:逐屏顯示(每屏顯示10條記錄)。7.全刪:進行全部刪除(要確認)。

二.課程設計要求

請選擇以下功能 1-增加記錄 2-修改記錄 3-刪除記錄

4-查找(按姓名)5-排序 6-顯示記錄

1.用漢化菜單實現。

2.提供按姓名查詢電話號碼的功能。

3.顯示功能(提供逐屏顯示的功能,每屏顯示10條記錄)。4.刪除和修改時要進行確認。

5.將電話簿記錄以文件的形式存在磁盤上;每次操作時將電話簿調出,操作完畢后存盤。

三.課程設計說明

1.程序采用數組數據結構實現。2.用類來實現數據的封裝。

四.參考數據結構

1.“電話簿”稱為用戶信息表,用數組實現。用戶信息表由若干用戶信息構成,每個用戶信息是一個數組元素。

2.“user.txt”是一個文件,用于保存“用戶信息表”中的信息。當系統啟動時,從該文件中讀入信息,當退出系統時,將“用戶信息表”中的信息寫到該文件中。該文件中信息存放形式如下:

ZhangHong 5221369 LiLi 84891112

ZhaoQiang 5221498

其中 ??name(姓名)占20列 ??phone_num(電話號碼)占12列

五.具體功能及實現

定義Fphone類,通過其私有成員數組name[20]和phone[12]分別記錄用戶姓名與電話號碼,定義UserDatabase類記錄用戶信息,通過公有成員函數實現對數據的操作。

六.源程序及注釋

#include #include #include #include #include #define M 20 #define N 12 #define MAX 100 class Fphone

//用戶信息類的定義 {

char name[M];

// 姓名

char phone_num[N];

//電話號碼 public: Fphone(char *na=“",char *ph=”“){ strcpy(name,na);

strcpy(phone_num,ph);} char*getname();

//獲取姓名

char*getphone_num();

//獲取電話號碼

void setname(char*a);

//設置姓名

void setphone_num(char*a);//設置電話號碼

void disp();

//顯示用戶信息 };char *Fphone::getname()

{ return name;} char *Fphone::getphone_num(){ return(phone_num);} void Fphone::setname(char *a){ strcpy(name,a);

} void Fphone::setphone_num(char*a){ strcpy(phone_num,a);} void Fphone::disp(){ cout<<”姓名:“<//用戶信息表類的定義 { int nElem;

//用戶信息表中的元素個數,即當前記錄總數

int Maxu;

//最多的用戶

Fphone *user;

//指向用戶信息表的指針

public: UserDatabase()

//構造函數,初始化用戶信息表,將user.txt文件中數據讀到User[]中

{ nElem=0;

Maxu=50;

user=new Fphone[Maxu];

fstream in;

in.open(”user.txt“,ios::in|ios::nocreate);//打開文件

for(int i=0;(!in.eof());i++)

{ in>>user[i].getname();in>>user[i].getphone_num();

nElem++;

}

in.close();}

~UserDatabase()

//析構函數,將user[]寫入user.txt文件中

{ fstream out;

Fphone *p=NULL;

p=user;

out.open(”user.txt“,ios::out,filebuf::sh_none);

for(int i=0;i

{ out<getname())<

<<((p+i)->getphone_num())<

}delete []user;

out.close();} void clear()

//刪除所有用戶信息

{ char ord;

cout<<”確定刪除嗎?(選擇:[y]是;[n]否)aa“<

do

{ cin>>ord;

if(ord=='N'||ord=='n')return;

else if(ord=='Y'||ord=='y')

{ delete[Maxu]user;

} user=0;cout<<”刪除成功啦!“<

user->setname(na);

user->setphone_num(ph_num);

} else if(nElem=0;i--)

{ if(strcmp((user+i)->getname(),na)>0)

{(user+i+1)->setname(((user+i)->getname()));

(user+i+1)->setphone_num(((user+i)->getphone_num()));

}

else break;

}

(user+i+1)->setname(na);

(user+i+1)->setphone_num(ph_num);

nElem++;} else cout <<”空間不足,無法添加!“<

//返回user指針 { return(user);} void delete_record(Fphone *p,int k)

//刪除用戶信息 { char con;cout<<”確認刪除?(Y/N)“;cin>>con;if(con=='N'||con=='n')return;else if(con=='Y'||con=='y'){ for(int i=k;i

{ user[i]=user[i+1];}

nElem--;

cout<<”已刪除!“<

return;} else

{ cout<<”輸入錯誤!“<

system(”pause“);

return;} } void modify_record(Fphone *p,char*ph_num)//修改用戶信息 { p->setphone_num(ph_num);} Fphone *query(char *na)

//按姓名查找 順序查找,這里也可以用折半 { Fphone *p=user;

int i=0;

while(1)

{ if(strcmp(p->getname(),na)==0)

return p;

p++;

if(i++==nElem)

break;} return NULL;} void sorta_name()//按姓名升序排序 插入排序法 { Fphone temp;int i,j;for(i=1;i

for(j=i-1;j>=0&&(strcmp(temp.getname(),user[j].getname())<0);j--)

{ strcpy(user[j+1].getname(),user[j].getname());

strcpy(user[j+1].getphone_num(),user[j].getphone_num());

}

strcpy(user[j+1].getname(),temp.getname());

strcpy(user[j+1].getphone_num(),temp.getphone_num());} } void sorta_phonenum()//按電話號碼升序排序 選擇排序法 { int i,j,p;Fphone temp;for(i=0;i

for(j=i+1;j

if(strcmp(user[j].getphone_num(),user[p].getphone_num())<0)p=j;

if(p!=i)

{ strcpy(temp.getname(),user[p].getname());

strcpy(temp.getphone_num(),user[p].getphone_num());

strcpy(user[p].getname(),user[i].getname());

strcpy(user[p].getphone_num(),user[i].getphone_num());

strcpy(user[i].getname(),temp.getname());

strcpy(user[i].getphone_num(),temp.getphone_num());

} } } void sort_name()//按姓名降序排序,將排成升序的對象數組逆向放置 { Fphone temp;int i,m=(nElem+1)/2;for(i=0;i

strcpy(temp.getphone_num(),user[i].getphone_num());

strcpy(user[i].getname(),user[nElem-i-1].getname());

strcpy(user[i].getphone_num(),user[nElem-i-1].getphone_num());

strcpy(user[nElem-i-1].getname(),temp.getname());

strcpy(user[nElem-i-1].getphone_num(),temp.getphone_num());} } void sort_phonenum()//按電話號碼降序排序 冒泡排序法 { Fphone temp;int i,m=(nElem+1)/2;for(i=0;i

strcpy(temp.getphone_num(),user[i].getphone_num());

strcpy(user[i].getname(),user[nElem-i-1].getname());

strcpy(user[i].getphone_num(),user[nElem-i-1].getphone_num());

strcpy(user[nElem-i-1].getname(),temp.getname());

strcpy(user[nElem-i-1].getphone_num(),temp.getphone_num());} } void disp(){ int i,n=0;cout<

cout<getname()

<getphone_num()<

n++;

if(n%10==0)

{ system(”pause“);

system(”cls“);

} }

cout<

請選擇以下功能:“<

1-增加記錄“<

2-修改記錄“<

3-刪除記錄“<

4-查找(按姓名)“<

5-排序“<

6-顯示記錄“<

7-全刪“<

0-退出“<

輸入選擇:“<

“<

“<

歡迎使用電話簿管理系統

“<

祝您使用愉快

“<

“<

system(”cls“);

menu();

int k;

cin>>k;

switch(k)

{ case 1:

{ system(”cls“)

cout<<”*****************************************“<

cout<<”

增加記錄

“<

Fphone *t=NULL;

char w;

do

{ cout<<”請輸入您要增加的用戶的姓名“;

cin>>na;

t=(s.query(na));

if(t)

{ cout<<”用戶已經存在,添加失敗!!“<

else

{ cout<<”請輸入用戶的電話號碼“;

cin>>ph_num;

s.add_record(na,ph_num);cout<<”您添加的信息為:“;cout<<”姓名:“<cout<<”成功添加“<

}

cout<<”是否繼續?(Y or N)“<

cin>>w;} while(w=='Y');break;}

case 2: { system(”cls“);

cout<<”***************************************“<

修改記錄

“<

char na[M],ph_num[N];

Fphone *t=NULL;

char w;

do

{ cout<<”請輸入您要修改的用戶的姓名“;

cin>>na;

t=s.query(na);

if(!t)

cout<<”沒有該用戶!“<

else

{ cout<<”該用戶原號碼為:“<getphone_num()<

cout<<”請輸入新的電話號碼“;

cin>>ph_num;

s.modify_record(t,ph_num);

cout<<”成功修改“<

}

cout<<”是否繼續?(Y or N)“<

cin>>w;

}

while(w=='Y');

break;} case 3: { system(”cls“);

cout<<”********************************************“<

刪除記錄

“<

cout<<”************** ***************************“<

char w;

char na[M];

int k;

Fphone *p;

do

{ cout<<”請輸入您要刪除的用戶的姓名“;

cin>>na;

p=s.query(na);

if(p==0)

cout<<”沒有該用戶!“<

else

{(*p).disp();

k=p-s.getuser();

s.delete_record(p,k);

}

cout<<”是否繼續?(Y or N)“<

cin>>w;

}

while(w=='Y');

break;} case 4: { system(”cls“);

cout<<”*********************************“<

cout<<”

查詢記錄

“<

cout<<”**********************************“<

char na[M];int p=1;

Fphone *t=NULL;

char w;

do

{ cout<<”請輸入您要查詢的用戶的姓名“;

cin>>na;

t=s.query(na);

if(t)

{

cout<<”姓名:“<getname()<

cout<<”電話號碼:“<getphone_num()<

}

else

cout<<”對不起,沒有此人信息!“<

cout<<”是否繼續?(Y or N)“<

cin>>w;}

} case 5: { while(w=='Y');break;system(”cls“);

cout<<”

請選擇排序方式

“<

cout<<”

1.按姓名(升序)

“<

cout<<”

2.按電話號碼(升序)

“<

cout<<”

3.按姓名(降序)

“<

cout<<”

4.按電話號碼(降序)

“<

cout<<”

請輸入你的選擇:

“<

int k;

cin>>k;

switch(k)

{ case 1:

s.sorta_name();

cout<<”排序完成“<

system(”cls“);

break;

case 2:

s.sorta_phonenum();

cout<<”排序完成“<

system(”cls“);

break;

case 3:

s.sort_name();

cout<<”排序完成“<

system(”cls“);

break;

case 4:

s.sort_phonenum();

cout<<”排序完成“<

system(”cls“);

break;

} }

case 6: { system(”cls“);

cout<<”*****************************************“<

cout<<”

顯示記錄

“<

cout<<”*****************************************“<

s.disp();

system(”pause“);break;

}

} } case 7: { system(”cls“);

cout<<”您確定要刪除所有記錄嗎?(Y or N)“<

char q;

cin>>q;

if(q=='Y'||q=='y')

{ cout<<”*********************************“<

cout<<”

全部刪除記錄

“<

cout<<”*********************************“<

s.clear();

}

else break;

system(”pause“);

break;} case 0: { system(”cls“);

cout<<”謝謝使用,再見!“<

exit(0);} default:

cout<<”不存在該選擇,請重新輸入要進行的操作:“<

system(”pause");

break;} 七.感想與心得

1.電話簿管理程序較長,算法比較復雜,調試的過程中遇到了各種各樣的問題。各種各樣的小錯誤尋找起來十分困難。在今后編寫程序時應當隨編隨找錯。

2.課設讓我們把這一學期所學的C++知識得到了很好的應用,開拓了我們的思路,所謂溫故而而知新,這次課設也讓我們對以前的知識有了一個全面的回顧,加深了對已學知識的理解。

3.課設過程艱辛,花費時間很長,需要很強的耐力和信心。而這也是對我們的一次考驗,養成了堅持不懈和吃苦耐勞的精神。總之,C++課設讓我們學到了很多,也收獲了很多,這必將成為我人生中的一個深刻的回憶。

第三篇:電話簿管理系統

#include #include #include #include #define HEADER1 “------------------------------telephone book--n” #define HEADER2 “|-------num-------|--------name--------|----phonenumber-----|---address------|n” #define HEADER3 “|-----------------|--------------------|--------------------|----------------|n” #define FORMAT “|%-10s

|%-10s

|%-15s

|%-16s|n” #define DATA

p->num

,p->name

,p->phonenum p->address #define END

“----------------n” #define N 100 int saveflag=0;

typedef int Status;typedef struct telebook{

char num[15];

char name[15];

char phonenum[15];

char address[20];}TELEBOOK;

void menu(){

system(“cls”);

textcolor(13);

gotoxy(10,5);

cprintf(“

The telephone-book Management System

n”);

gotoxy(10,8);

cprintf(“*****************************************************n”);

gotoxy(10,9);

cprintf(“* input record display record

* n”);

gotoxy(10,10);

cprintf(“* delete record

search record

* n”);

gotoxy(10,11);

cprintf(“* modify record

insert record

* n”);

gotoxy(10,12);

cprintf(“* sort record

save record

* n”);

gotoxy(10,13);

cprintf(“*

0 input record

* n”);

gotoxy(10,14);

cprintf(“*****************************************************n”);} ,void printheader(){

printf(HEADER1);

printf(HEADER2);

printf(HEADER3);}

void printdata(TELEBOOK pp){

TELEBOOK *p;

p = &pp;

printf(FORMAT,DATA);}

void Disp(TELEBOOK temp[],int n){

int i;

if(n==0)

{

printf(“n======>Not telephone record!n”);

getchar();

return;

}

printf(“nn”);

printheader();

i=0;

while(i

{

printdata(temp[i]);

i++;

printf(HEADER3);

}

getchar();}

void Wrong(){

printf(“nnnnn********Error:input has wrong!press any key to continue*******n”);

getchar();}

void Nofind(){

printf(“n========>Not find this telephone record!n”);}

Status Locate(TELEBOOK temp[],int n,char findmess[],char nameorphonenum[])

/*find the locate*/ {

int i=0;

if(strcmp(nameorphonenum,“phonenum”)==0)

{

while(i

{

if(strcmp(temp[i].phonenum,findmess)==0)return i;

i++;

}

}

else if(strcmp(nameorphonenum,“name”)==0)

{

while(i

{

if(strcmp(temp[i].name,findmess)==0)return i;

i++;

}

}

return-1;}

void stringinput(char *t,int lens,char *notice){

char n[255];

do{

printf(notice);

scanf(“%s”,n);

if(strlen(n)>lens)printf(“n exceed the required length!n”);

}while(strlen(n)>lens);

strcpy(t,n);}

Status Add(TELEBOOK temp[],int n)

/*increase record*/ {

char ch,num[10];

int i,flag=0;

system(“cls”);

Disp(temp,n);

while(1)

{

while(1)

{

stringinput(num,10,“input number(press '0' retrun menu):”);

flag = 0;

if(strcmp(num,“0”)==0)

{ return n;}

i=0;

while(i

{

if(strcmp(temp[i].num,num)==0)

{

flag = 1;

break;

}

i++;

}

if(flag==1)

{

getchar();

printf(“==>The number %s is existing,try again?(Y/N):”,num);

scanf(“%c”,&ch);

if(ch=='Y'&&ch=='y')continue;

else return n;

}

else break;

}

strcpy(temp[n].num,num);

stringinput(temp[n].name,15,“Name:”);

stringinput(temp[n].phonenum,15,“Telephone:”);

stringinput(temp[n].address,15,“Adress:”);

saveflag=1;

n++;

}

return n;}

void Qur(TELEBOOK temp[],int n)/*search the record*/ {

int select;

char searchinput[20];

int p = 0;

if(n<=0)

{

system(“cls”);

printf(“n====>No telephone record!n”);

getchar();

return;

}

system(“cls”);

printf(“n=====>1 Search by name =====>2 Search by telephonenumber!n”);

printf(“

Please choice(1,2):”);

scanf(“%d”,&select);

if(select==1)

{

stringinput(searchinput,10,“input the existing name:”);

p = Locate(temp,n,searchinput,“name”);

if(p!=-1)

{

printheader();

printdata(temp[p]);

printf(END);

printf(“press any key to return ”);

getchar();

}

else {

Nofind();

getchar();

}

}

else if(select==2)

{

stringinput(searchinput,15,“input the exiseing telephone number:”);

p = Locate(temp,n,searchinput,“phonenum”);

if(p!=-1)

{

printheader();printdata(temp[p]);

printf(END);

printf(“press any key to return ”);

getchar();

}

else { Nofind();getchar();}

}

else Wrong();getchar();}

Status Del(TELEBOOK temp[],int n){

int sel;

char findmess[20];

int p=0,i=0;

if(n<=0)

{

system(“cls”);

printf(“n======>No telephone!n”);

getchar();

return n;

}

system(“cls”);

Disp(temp,n);

printf(“ ===>1 Name ====>2 Telephone Please choice[1,2]:”);

scanf(“%d”,&sel);

if(sel==1)

{

stringinput(findmess,15,“input the existing name:”);

p = Locate(temp,n,findmess,“name”);

getchar();

if(p!=-1)

{

for(i=p+1;i

{

strcpy(temp[i-1].num,temp[i].num);

strcpy(temp[i-1].name,temp[i].name);

strcpy(temp[i-1].phonenum,temp[i].phonenum);

strcpy(temp[i-1].address,temp[i].address);

}

printf(“n==>delete successn”);

n--;

getchar();

saveflag=1;

}

else

Nofind();

getchar();

}

else if(sel==2)

{

stringinput(findmess,15,“input the existing telephone number:”);

p = Locate(temp,n,findmess,“phonenum”);

getchar();

if(p!=-1)

{

for(i=p+1;i

{

strcpy(temp[i-1].num,temp[i].num);

strcpy(temp[i-1].name,temp[i].name);

strcpy(temp[i-1].phonenum,temp[i].phonenum);

strcpy(temp[i-1].address,temp[i].address);

}

printf(“n======>delete success!n”);

n--;

getchar();

saveflag = 1;

}

else

Nofind();

getchar();

}

else

Nofind();

getchar();

return n;}

void Modify(TELEBOOK temp[],int n){

char findmess[20];

int p = 0;

if(n==0)

{

system(“cls”);

printf(“n=======>No telephone book recorderdn”);

getchar();

return;

}

system(“cls”);

printf(“modify telephone book recorder”);

Disp(temp,n);

stringinput(findmess,10,“input the existing name:”);

p = Locate(temp,n,findmess,“name”);

if(p!=-1)

{

printf(“Number : %sn”,temp[p].num);

printf(“Name : %sn”,temp[p].name);

stringinput(temp[p].name,15,“input new name:”);

printf(“Telephone:%s n”,temp[p].phonenum);

stringinput(temp[p].phonenum,15,“input new phonenum:”);

printf(“Address:%sn”,temp[p].address);

stringinput(temp[p].address,30,“input new address:”);

printf(“n==========>modify success!n”);

getchar();

saveflag = 1;

}

else {

Nofind();

getchar();

}

return;}

Status Insert(TELEBOOK temp[],int n){

char ch,num[10],snum[10];

TELEBOOK newinfo;

int flag = 0,i =0,kkk = 0;

system(“cls”);

Disp(temp,n);

while(1)

{

stringinput(snum,10,“Please input insert location after the Number:”);

flag = 0;i = 0;

while(i

{

if(strcmp(temp[i].num,snum)==0){kkk = i;flag = 1;break;}

i++;

}

if(flag==1)break;

else {

getchar();

printf(“n=====>The number %s is not existing,try again?(Y/N)”,snum);

scanf(“%c”,&ch);

if(ch=='Y'||ch=='y')continue;

else return n;

}

}

while(1)

{

stringinput(num,10,“input the new Number:”);

i = 0;flag = 0;

while(i

{

if(strcmp(temp[i].num,num)==0){flag = 1;break;}

i++;

}

if(flag==1){

getchar();

printf(“n=======>Sorry,The number %s is existing,try again(Y/N)”,num);

scanf(“%c”,&ch);

if(ch=='y'||ch=='Y')continue;

else return n;

}

else break;

}

strcpy(newinfo.num,num);

stringinput(newinfo.name,15,“Name:”);

stringinput(newinfo.phonenum,15,“Telephone:”);

stringinput(newinfo.address,15,“Address:”);

saveflag = 1;

for(i=n-1;i>kkk;i--)

{

strcpy(temp[i+1].num,temp[i].num);

strcpy(temp[i+1].name,temp[i].name);

strcpy(temp[i+1].phonenum,temp[i].phonenum);

strcpy(temp[i+1].address,temp[i].address);

}

strcpy(temp[kkk+1].num,newinfo.num);

strcpy(temp[kkk+1].name,newinfo.name);

strcpy(temp[kkk+1].phonenum,newinfo.phonenum);

strcpy(temp[kkk+1].address,newinfo.address);

n++;

Disp(temp,n);

printf(“nn”);

getchar();

return n;}

void SelectSort(TELEBOOK temp[],int n){

int i=0,j=0,indexmin;

char charflag[10];

TELEBOOK newinfo;

if(n<=0)

{

system(“cls”);

printf(“====>Not telephone record!n”);

getchar();

return;

}

system(“cls”);

Disp(temp,n);

printf(“The order is sorted by number:n”);

for(i=0;i

{

indexmin = i;

for(j=i+1;j

if(strcmp(temp[i].num,temp[j].num>0))

indexmin = j;

if(indexmin!=i)

{

strcpy(newinfo.num,temp[i].num);

strcpy(newinfo.name,temp[i].name);

strcpy(newinfo.phonenum,temp[i].phonenum);

strcpy(newinfo.address,temp[i].address);

strcpy(temp[indexmin].num,newinfo.num);

strcpy(temp[indexmin].name,newinfo.name);

strcpy(temp[indexmin].phonenum,newinfo.phonenum);

strcpy(temp[indexmin].address,newinfo.address);

}

}

Disp(temp,n);

saveflag = 1;

printf(“n=======>sort complete!n”);

getchar();

return;}

void Save(TELEBOOK temp[],int n){

FILE *fp;

int i = 0;

fp = fopen(“c: elephonebook”,“w”);

if(fp==NULL)

{

printf(“n=====>open file error!n”);

getchar();

return;

}

for(i=0;i

{

if(fwrite(&temp[i],sizeof(TELEBOOK),1,fp)==1)

continue;

else break;

}

if(i>0)

{

getchar();printf(“nn=====>save file comlete,toal save's record is save's record number is:%dn”,i);

getchar();

saveflag = 0;

}

else {

system(“cls”);

printf(“the current link is empty , no telephone record is saved!n”);

getchar();

fclose(fp);

} }

void main(){

TELEBOOK tele[N];

FILE *fp;

int select;

char ch;

int count=0;

fp = fopen(“C: elephonebook”,“a+”);

if(fp==NULL)

{

printf(“n========>can not open file!n”);

exit(0);

}

while(!feof(fp))

{

if(fread(&tele[count],sizeof(TELEBOOK),1,fp)==1)

count++;

}

fclose(fp);

printf(“n==>open file sucess, the total records number is :%d.n”,count);

getchar();

menu();

while(1)

{

system(“cls”);

menu();

printf(“n

Please Enter you choice(0-9):”);

scanf(“%d”,&select);

if(select==0)

{

if(saveflag==1)

{

getchar();

printf(“n==>Wether save the modified record to file?(Y/N):”);

scanf(“%c”,&ch);

if(ch=='Y'||ch=='y')

Save(tele,count);

}

printf(“n===>thank you for useness!”);

getchar();

break;

}

switch(select)

{

case 1:count=Add(tele,count);break;

case 2:system(“cls”);Disp(tele,count);break;

case 3:count = Del(tele,count);break;

case 4:Qur(tele,count);break;

case 5:Modify(tele,count);break;

case 6:count = Insert(tele,count);break;

case 7:SelectSort(tele,count);break;

case 8:Save(tele,count);break;

default :Wrong();getchar();break;

}

}

getch();}

第四篇:學生成績管理系統C++程序設計

項目設計題目(學生成績管理系統)

學號:

姓名:

自評成績:

成績:

1.選題意義、依據

學生成績系統的設計從學生的應用中而來,學生了解該系統的組成和運行過程,它貼近學生的生活能使學生更加方便的使用各個語句、函數、結構體等。

依據學生期末成績表的格式。

2.系統功能設計與分析(功能模塊說明)

系統主要用于從一個文件夾讀入學生信息(101 張三

78 87 102 李斯

103 王紅

79 87 104 趙子龍 72 75 76

李洪磊 88 98 89),包括學生學號、姓名、成績(數學、英語、數據庫),程序中引用了八個函數 void Cscore(int);void Rank(int ave);void Listnumber(int i);

void Listscore(int i);void Lookup(int);void Alter(int);void Dele(int &i);void Insert(int &i);系統主要實現的功能有:查詢、修改、刪除、插入、成績單(以學號排名)和成績單(以名次排名)。

Cscore 函數主要是對學生進行排名。具有相同總分的學生具有相同的名次,例如:第三名和第四名具有相同的總分則在表中不會出現第四名,將出現兩個第三名緊接著出現第五名學生的情況。

Rank 函數主要用于按平均分對學生進行備注。把學生分為四個等級:>90分為excellent,80—90分為medium,60—80分為qualified,<60分為disqualified。Listnumber 函數主要用于把學生的信息(學號 姓名 數學 英語 數據庫 總分平均分 名次 備注)以學號排名的順序用表的形式輸出,方便學生查看。Listnumber 函數中還調用了Cscore 和Rank 函數。

Listscore 函數是把學生的信息以總成績排名的形式輸出。

Lookup 函數主要運用學號或姓名形式查詢單個學生信息,如果存在則輸出該學生信息(學號 姓名 數學 英語 數據庫 總分平均分 名次 備注),否則輸出“Input message is error.”。

Alter 函數是修改指定學號的學生信息。主要用于修改指定學號學生的各科成績并輸出修改后的學生信息(學號 姓名 數學 英語 數據庫 總分平均分 名次 備注)。

Delete 函數用于刪除指定學生的信息。可用兩種方式刪除:以學號形式刪除學生信息,以姓名形式刪除學生信息。若要刪除了學生不存在則輸出“message error.”。

Insert 函數用來插入學生的信息,一次調用Insert 函數可以添加多個學生的信息。Insert 函數中還調用了Cscore 和Rank 函數。

3.涉及的主要知識點說明

(1)系統主要運用了函數的聲明、定義、調用(值調用和地址調用)。

(2)對文件的讀入操作。

(3)在平均分的求取上采用四舍五入的方式,運用了類型轉換。(4)多次運用if和for嵌套,在for嵌套中又運用了break語句。(5)運用了switch。

(6)對字符數組的比較中運用了strcmp,還運用toupper把小寫字母轉換成大寫。

(7)對學生信息進行的插入和有序刪除操作。(8)運用iomanip對輸出進行美觀。

4.創新性說明(怎么解決)

創新性:系統可以對具有相同總分學生的學生輸出相同的名次。若存在三個相同的分數都為第二名,則在輸出時出現三個第二名不會出現第三、四名,緊接著出現第五名。

解決方法:(1)用一個數組記錄具有相同分數的人數,數組下標和學生信息所具有的下標相同;(2)刪除相同的總分只保留其中一個分數;(3)對刪除相同總分的分數按從高到底進行排序;(4)對各個學生的總分進行排名。

5.源代碼

//****************************************************************** //Student achievement program //This program has eight functions of students grade,including list //score ranking,lookup,alter,delete,insert and rank.From the file read in //student achievement.Scores of people have the same same place.//****************************************************************** #include #include #include #include #include #include

void Cscore(int);void Rank(int ave);void Listnumber(int i);void Listscore(int i);void Lookup(int);void Alter(int);void Dele(int &i);void Insert(int &i);

using namespace std;const int MAX=100;

struct student

//定義學生信息結構體 { int num;char name[8];int math;int english;int database;int sum;int average;int score;}stu[MAX];

int main()

//主函數 {

int i,k;char ch;string filename;ifstream infile;

cout<<“Please input the filenames: ”;cin>>filename;infile.open(filename.c_str());if(!infile){

cout<<“Can't open the input file.”<

return 1;} for(i=0;i

infile>>stu[i].num>>stu[i].name>>stu[i].math>>stu[i].english>>stu[i].database;

stu[i].sum=stu[i].math+stu[i].english+stu[i].database;

stu[i].average=int(float(stu[i].sum)/3+0.5);} i=i-1;cout<

學生成績管理系統

”<

cout<<“Y or N 進入菜單欄 ”<>ch;ch=toupper(ch);while(ch=='Y'){ cout<

<<“

菜單:”<

<<“

1)查 詢”<

<<“

2)修 改”<

<<“

3)刪 除”<

<<“

4)插 入”<

<<“

5)成績單(以學號排名)”<

6)成績單(以名次排名)”<

cout<<“***請選擇 1--4 中任何一個:”<

cin>>k;

cout<

switch(k){

case 1:Lookup(i);break;

case 2:Alter(i);break;

case 3:Dele(i);break;

case 4:Insert(i);break;

case 5:Listnumber(i);break;

case 6:Listscore(i);break;

default :cout<<“error input!”<

cout<

cin>>ch;

ch=toupper(ch);} cout<<“Thank you for using!”<

<<“Bye bye!”<

void Cscore(int i)

//對學生分數進行排名 { int h[MAX],b[MAX],score[MAX+1],n,k,j;int sum0[MAX],s;n=i;for(j=0;j

sum0[j]=stu[j].sum;} for(j=0;j

h[j]=0;for(k=0;k

h[j]++;

//具有同一分數的人數

} } //end for } //end for for(j=0;j

//刪除多個同一分數只保留其中一個分數 { for(k=j+1;k

if(sum0[j]==sum0[k])

{

sum0[k]=sum0[i-1];

i--;

k--;

} } } //end for for(j=0;j

//按從高到底的順序對總分進行排名 { for(k=j+1;k

if(sum0[j]

{

s=sum0[j];

sum0[j]=sum0[k];

sum0[k]=s;

} //end if } //end for } //end for b[0]=0;score[0]=1;for(j=0;j

//對學生成績進行排名 { for(k=0;k

if(sum0[j]==stu[k].sum)

{

score[j+1]=score[j]+b[j];

stu[k].score=score[j+1];

b[j+1]=h[k];

} //end if

} //end for } //end for }

void Rank(int ave)

//對學生等級輸出 { if(ave>=90)

{

cout<<“excellent”;

}

else if(ave>=80)

{

cout<<“medium”;

}

else if(ave>=60)

{

cout<<“qualified”;

}

else

{

cout<<“disqualified”;

}

cout<

void Listnumber(int i){ int j;Cscore(i);cout<<“學號

姓名

數學

英語

數據庫

總分

平均分

名次

備注

”<

cout<

<

cout<

cout<

cout<

Rank(stu[j].average);} }

void Listscore(int i){ int j,k;Cscore(i);cout<<“學號

姓名

數學

英語

數據庫

總分

平均分

名次

備注

”<

for(k=0;k

{

if(stu[k].score==j)

{

cout<

<

cout<

cout<

cout<

Rank(stu[k].average);

}

} } }

void Lookup(int i)

//運用學號或姓名形式查詢單個學生信息 { int j,k,n,numb;char name1[8];

cout<<“Please select you check score ways.”<>n;if(n)

//以學號形式查詢學生信息

{

cout<<“Please input student number: ”;

cin>>numb;

for(j=0;j

{

if(numb==stu[j].num)

{

k=j;

break;

}

} } else

//以姓名形式查詢學生信息

{

cout<<“Please input student name: ”;

cin>>name1;

for(j=0;j

if(strcmp(stu[j].name,name1)==0)

{

k=j;

break;

} } if(k==MAX){

cout<<“Input message is error.”<

//如果學生存在則輸出學生信息

{

Cscore(i);

cout<<“學號

姓名

數學

英語

數據庫

總分

平均分

名次

備注

”<

cout<

<

cout<

cout<

cout<

Rank(stu[j].average);} }

void Alter(int i)//修改指定學號的學生信息 { int numb,j;

cout<<“alter begin...”<

cout<<“Please input number:”;

cin>>numb;for(j=0;j

if(numb==stu[j].num)

{

cout<<“find out:”<

cout<<“學號:”<

cout<<“Please input new result: 數學

英語

數據庫 ”<

cin>>stu[j].math>>stu[j].english>>stu[j].database;

stu[j].sum=stu[j].math+stu[j].english+stu[j].database;

stu[j].average=int(float(stu[j].sum)/3.0+0.5);

Cscore(i);

//輸出修改后該學號學生的信息

cout<<“學號

姓名

數學

英語

數據庫

總分

平均分

名次

備注

”<

cout<

<

cout<

cout<

cout<

Rank(stu[j].average);

break;

} } }

void Dele(int &i)

//刪除指定學生的信息 { int numb,j,k;char name0[8];cout<<“delete begin...”<

cout<<“

[1]以學號形式刪除學生信息”<

[0]以姓名形式刪除學生信息”<>k;if(k)

//以學號形式刪除學生的信息

{

cout<<“Please input delete number:”;

cin>>numb;

for(j=0;j

{

if(numb==stu[j].num)

break;

} } else

//以姓名形式刪除學生的信息

{

cout<<“Please input delete name:”;

cin>>name0;

for(j=0;j

{

if(strcmp(name0,stu[j].name)==0)

break;

}

}

void Insert(int &i)

//插入學生的信息 { int j,n;cout<<“insert begin...”<>n;i=i+n;cout<<“Please input insert message.form:”<

cin>>stu[j].num>>stu[j].name>>stu[j].math>>stu[j].english>>stu[j].database;

stu[j].sum=stu[j].math+stu[j].english+stu[j].database;

stu[j].average=int(float(stu[j].sum)/3.0+0.5);} Cscore(i);cout<<“學號

姓名

數學

英語

數據庫

總分

平均分

名次

備注

”<

cout<

<

cout<

cout<

stu[j].num=stu[j+1].num;

strcpy(stu[j].name,stu[j+1].name);

stu[j].math=stu[j+1].math;

stu[j].english=stu[j+1].english;

stu[j].database=stu[j+1].database;

stu[j].sum=stu[j+1].sum;

stu[j].average=stu[j+1].average;} i=i-1;Cscore(i);} else cout<<“message error.”<

cout<

運行結果:

分析:

系統基本上能實現對成績的查詢、、修改、刪除、插入、成績單(以學號排名)和成績單(以名次排名)等功能,并且可以插入多個學生的信息。但在插入學生后未不能成績單以學號排名的形式輸出。為了改進程序對Insert 函數進行了一下修改。

Insert 函數代碼如下:

void Insert(int &i)

//插入學生的信息 {

int j,k,n,m,first,last,mid;int num0,math0,english0,database0;char name0[8];cout<<“insert begin...”<>n;m=i+n;first=0;last=i-1;mid=(first+last)/2;cout<<“Please input insert message.form:”<>stu[j].num>>stu[j].name>>stu[j].math>>stu[j].english>>stu[j].database;while(first<=last){

if(stu[j].num

{

last=mid-1;

}

else if(stu[j].num>stu[mid].num)

{

first=mid+1;

}

else

{

break;

}

mid=(first+last)/2;} if(first>last){

num0=stu[j].num;

strcpy(name0,stu[j].name);

math0=stu[j].math;

english0=stu[j].english;

database0=stu[j].database;

for(k=i-1;k>first;k--)

//進行有序插入

{

stu[k].num=stu[k-1].num;

strcpy(stu[k].name,stu[k-1].name);

stu[k].math=stu[k-1].math;

}

stu[k].english=stu[k-1].english;

stu[k].database=stu[k-1].database;

stu[k].sum=stu[k-1].sum;

stu[k].average=stu[k-1].average;

}

stu[first].num=num0;

strcpy(stu[first].name,name0);

stu[first].math=math0;

stu[first].english=english0;

stu[first].database=database0;

stu[first].sum=stu[first].math+stu[first].english+stu[first].database;

stu[first].average=int(float(stu[first].sum)/3.0+0.5);} else {

cout<<“message error.”<

last=i-1;

mid=(first+last)/2;} Cscore(i);

修改后程序經運行后結果如下:

結果發現修改后的程序運用了二分查找法、多重嵌套等,能較好的實現對學生的信息以學號為序進行了多個數據的有序插入。

第五篇:c語言 電話簿管理系統

#include “stdio.h” #include “string.h” #define N 20 struct mem { char name[20];

char tel[20];

char wu[20];

char dz[20];}mem[N];void sorttel(struct mem tel[]){

struct mem temp;

int i,j;

FILE *fp;if((fp=fopen(“c: elephone.txt”,“rb”))==NULL){

printf(“不能打開文件n”);} for(i=0;i

for(j=0;j

if(strcmp(mem[j+1].tel,mem[j].tel)<0)

{

temp=mem[j];

mem[j]=mem[j+1];

mem[j+1]=temp;

} for(i=0;i

void sortname(struct mem tel[]){

struct mem temp;

int i,j;

FILE *fp;if((fp=fopen(“c: elephone.txt”,“rb”))==NULL){

printf(“不能打開文件n”);} for(i=0;i

for(j=i+1;j

if(strcmp(mem[j].name,mem[i].name)<0)

{

temp=mem[i];

mem[i]=mem[j];

mem[j]=temp;

} for(i=0;i

void sor(){int k;

do{printf(“--------------------排序菜單-------------------n”);

printf(“------------------------n”);

printf(“

1:按號碼排序n”);

printf(“

2:按姓名排序n”);

printf(“

0:退出n”);

printf(“------------------------n”);

printf(“請輸入0-2選擇功能n”);

scanf(“%d”,&k);getchar();

switch(k)

{

case 1:sorttel(mem);break;

case 2:sortname(mem);break;

case 0:return;

}

}while(1);}

void add(){ char name[10];char tel[10];

char wu[10];

char dz[10];FILE *fp;if((fp=fopen(“c: elephone.txt”,“a”))==NULL){

printf(“不能打開文件n”);

exit(0);}

printf(“請輸入姓名”);

gets(name);

printf(“請輸入電話號碼”);

gets(tel);

printf(“請輸入工作單位”);

gets(wu);

printf(“請輸入地址”);

gets(dz);printf(“n”);

fprintf(fp,“%s %s %s %sn”,name,tel,wu,dz);

fclose(fp);} void del(){

FILE *fp;

int i=0,n;

char name[10];

printf(“請輸入刪除名字”);

gets(name);

if((fp=fopen(“c: elephone.txt”,“r”))==NULL){

printf(“不能打開文件n”);

exit(0);}

while(!feof(fp))

{

fscanf(fp,“%s%s%s%s”,mem[i].name,mem[i].tel,mem[i].wu,mem[i].dz);

if(strcmp(name,mem[i].name)!=0)i++;

}

fclose(fp);if((fp=fopen(“c: elephone.txt”,“w”))==NULL){

printf(“不能打開文件n”);

exit(0);} for(n=0;n

fprintf(fp,“%s %s %s %s”,mem[n].name,mem[n].tel,mem[n].wu,mem[n].dz);fclose(fp);} void dis(){ FILE * fp;int i=0,n;printf(“

姓名

電話號碼

工作單位

地址n”);

if((fp=fopen(“c: elephone.txt”,“r”))==NULL){

printf(“不能打開文件n”);

exit(0);}

while(!feof(fp))

{fscanf(fp,“%s%s%s%s”,mem[i].name,mem[i].tel,mem[i].wu,mem[i].dz);i++;}

fclose(fp);

n=i;

for(i=0;i

printf(“%-8s%11s%13s%24sn”,mem[i].name,mem[i].tel,mem[i].wu,mem[i].dz);} void mod(){ FILE * fp;int i=0,n;char name[10];char nn[10];char nt[10];char nwu[10];char ndz[10];

printf(“請輸入要修改的姓名”);gets(name);printf(“請輸入修改后的姓名”);gets(nn);printf(“請輸入修改后的電話號碼”);gets(nt);printf(“請輸入修改后的工作單位”);gets(nwu);printf(“請輸入修改后的地址”);gets(ndz);printf(“n”);if((fp=fopen(“c: elephone.txt”,“r”))==NULL){

printf(“不能打開文件n”);

exit(0);}

while(!feof(fp))

{

fscanf(fp,“%s%s%s%s”,mem[i].name,mem[i].tel,mem[i].wu,mem[i].dz);

if(strcmp(name,mem[i].name)==0)

{strcpy(mem[i].name,nn);strcpy(mem[i].tel,nt);strcpy(mem[i].wu,nwu);strcpy(mem[i].dz,ndz);}

i++;

}

fclose(fp);if((fp=fopen(“c: elephone.txt”,“w”))==NULL){

printf(“不能打開文件n”);

exit(0);}

n=i;

for(i=0;i

fprintf(fp,“%s %s %s %sn”,mem[i].name,mem[i].tel,mem[i].wu,mem[i].dz);

fclose(fp);} void main(){

int choose;

while(1)

{

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”);

printf(“請輸入0-6選擇功能n”);

scanf(“%d”,&choose);getchar();

if(choose!=0)

switch(choose)

{

case 1:add();break;

case 2:del();break;

case 3:dis();break;

case 4:mod();break;

case 5:sor();break;

case 6:/*que();break*/;

}

else exit(0);

} }

下載C++程序設計—電話簿管理系統word格式文檔
下載C++程序設計—電話簿管理系統.doc
將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
點此處下載文檔

文檔為doc格式


聲明:本文內容由互聯網用戶自發貢獻自行上傳,本網站不擁有所有權,未作人工編輯處理,也不承擔相關法律責任。如果您發現有涉嫌版權的內容,歡迎發送郵件至:645879355@qq.com 進行舉報,并提供相關證據,工作人員會在5個工作日內聯系你,一經查實,本站將立刻刪除涉嫌侵權內容。

相關范文推薦

    C++程序設計總結

    第一章面向對象編程原理 ?近五十年間,軟件技術經歷了多個階段的發展演變 ? 目前為止最流行的技術還是面向過程編程(POP) ? 面向過程編程采用了自頂向下的設計方案,問題被看做多個......

    C++通訊錄管理系統

    黑龍江工程學院 第一章 問題分析和任務定義 1.1 問題分析 問題: 編寫一個通訊錄管理系統。要求包括通訊錄建立、增加號碼、刪除號碼、查詢號碼(按姓名、按號碼)、修改號碼、......

    C++程序設計實習報告

    目錄 一、實習內容…………………………………………………………………………1 二、設計思路…………………………………………………………………………2 三、程序清單…......

    《C++程序設計》實驗報告范例

    注意:以下藍色文字部分根據情況增刪實驗1熟悉VC++6.0集成開發環境 一、實驗時間: 2011年9月20日 二、實驗地點: 第7機房 三、指導教師: 鄧譜 四、實驗目的: 1. 了解VC++6.0的主要......

    c++程序設計教案(朱紅)

    1構造一個類,含有3個數據成員,為長方體的長、寬、高,含有一個成員函數,用來計算長方體的體積 #include "stdafx.h" #include class cub { private: double a,b,c; public: voi......

    C++程序設計課程設計人口戶籍信息管理系統源程序

    九、源程序代碼 #include #include #include #include//kj;lj;j;j; class population { private: int maxnum;//人口戶籍編號最大值r int sno;//編號 char name[20]; char......

    C++課程設計(簡單圖書管理系統)

    課 程 設 計 課程名稱C++課程設計 題目名稱圖書管理系統 2016 年6 月 29 日目錄 一.設計內容與要求 .......................................................................

    C++課程設計(教務管理系統)

    #include using namespace std; #include #include #include #include #include #include"01.h" class University; void menu(University uni);//菜單函數聲明class Stude......

主站蜘蛛池模板: 韩国三级中文字幕hd| 日本高清熟妇老熟妇| 亚洲熟妇中文字幕五十中出| 国产精品亲子乱子伦xxxx裸| 亚洲中文字幕无码av永久| 国产成人亚洲日韩欧美久久| 亚洲精品一区二区三区麻豆| 国精产品一区二区三区有限公司| 国产成人欧美亚洲日韩电影| 国产超碰人人模人人爽人人喊| 亚洲综合区图片小说区| 国产午夜成人无码免费| 色噜噜亚洲男人的天堂| 国产精品狼人久久久久影院| 亚洲丁香五月激情综合| 欧美专区日韩视频人妻| 无码视频免费一区二区三区| 性做久久久久久免费观看| 久久av无码精品人妻出轨| 亚洲三级高清免费| 又爽又高潮的bb视频免费看| 无码精品人妻 中文字幕| 337p日本欧洲亚洲大胆精品555588| 精品国产污污免费网站| 无码av片在线观看免费| 久久久久高潮毛片免费全部播放| 最新精品国偷自产在线| 久久久噜噜噜久久熟女| 美女无遮挡免费视频网站| 国产一区二区内射最近更新| 激情五月开心综合亚洲| 欧美大肥婆大肥bbbbb| 色五月激情五月| 亚洲国产成人一区二区在线| 亚洲国产精品无码专区在线观看| 兔费看少妇性l交大片免费| 国产午夜精品一区理论片| 国产熟女露脸大叫高潮| 国产亚洲欧美在线专区| 国产成人无码av在线播放dvd| 四虎影在永久在线观看|