第一篇:8通訊錄管理系統(tǒng)C#編程_課程設計_圖文.
福建工程學院
課程名稱:C#.NET程序設計 設計題目:通訊錄管理系統(tǒng) 學生班級: 學生姓名: 指導教師: 完成日期:
一、設計目的(1
二、需求分析(2 2.1設計題目(2 2.2設計構(gòu)思(2 2.3運行界面需求(3 2.4開發(fā)及運行環(huán)境(3 2.5程序文件清單(3 2.5.1數(shù)據(jù)庫模塊(3
三、模塊分析及設計(4 3.1系統(tǒng)功能結(jié)構(gòu)圖(4 3.2系統(tǒng)數(shù)據(jù)流程圖(4
四、數(shù)據(jù)庫設計(5
4.1數(shù)據(jù)庫需求分析(5 4.2E-R圖(6 4.3數(shù)據(jù)表設計(6 4.3.1登錄用戶信息表(Users(6 4.3.2通訊錄信息表(Contact(7
五、制作過程及要點(7 5.1IsExist類(7 5.2用戶登錄與注冊模塊詳細設計(8 5.3系統(tǒng)主界面設計(14 5.4通訊錄“顯示全部”模塊(15 5.5通訊錄“添加”模塊(17 5.6通訊錄“查找”模塊(18 5.7通訊錄“修改”模塊(20 5.8通訊錄“刪除”模塊(22
六、設計總結(jié)(24
七、主要參考書及手冊(25
一、設計目的
日益繁多的人際交往使得我們很難搞清楚與每個人之間的聯(lián)系方式,特別是對于做經(jīng)常出差的人來說更是難,所以通訊錄能夠便捷的給我們帶來所需要的相關(guān)信
息。而隨著計算機的普及,人們的生活擺脫了傳統(tǒng)式的記事本、電話簿,越來越多的靠計算機來幫助人們記住這些事情,極其簡便。這就需要有一個使用的通訊錄管理系統(tǒng),用戶可以方便的通過自己電腦的通訊錄管理系統(tǒng),來隨時查閱自己所需要的信息,而不必再大費周折去翻開那繁瑣的記事本。
通訊錄管理系統(tǒng)是一個專門針對儲存用戶聯(lián)系方式以及一些簡單個人信息的實用管理系統(tǒng),它方便了用戶對眾多客戶、朋友、同事等個人信息的儲存和快速查閱的功能,大大減少了查找過程的時間。
二、需求分析 2.1設計題目 通訊錄管理系統(tǒng) 2.2設計構(gòu)思
通訊錄管理系統(tǒng)功能需求分析: 通訊錄管理系統(tǒng)主要功能分為五個模塊:用戶登錄與注冊、用戶查詢、添加記錄、修改記錄、刪除記錄。
用戶登錄與注冊:實現(xiàn)不同用戶的注冊跟登錄通訊錄
顯示全部:實現(xiàn)用戶對所有存在于數(shù)據(jù)庫中的數(shù)據(jù)的顯示,方便用戶了解數(shù)據(jù)存儲的情況。
查找記錄:實現(xiàn)用戶在本軟件數(shù)據(jù)庫中查找自己需要的數(shù)據(jù)功能。添加記錄:實現(xiàn)用戶添加一條完整的記錄,包括姓名、生日、電話、郵箱、地址。
修改記錄:用戶對數(shù)據(jù)庫中已存在的記錄進行修改,然后保存已經(jīng)修改過的數(shù)據(jù)
刪除記錄:用戶對數(shù)據(jù)庫中已經(jīng)存在的記錄進行行刪除操作,然后保存修改過的數(shù)據(jù)
2.3運行界面需求 界面應簡潔,使用者易操作 2.4開發(fā)及運行環(huán)境
本系統(tǒng)開發(fā)平臺及運行環(huán)境如下: 系統(tǒng)開發(fā)平臺:Microsoft Visual Studio2008 系統(tǒng)開發(fā)語言:C# 數(shù)據(jù)庫管理軟件:SQL Server2005 運行平臺:Windows XP(SP2/Windows2000(SP4/Windows Server 2003(SP1 運行環(huán)境:Microsoft.NET Framework SDK v3.0 分辨率:最佳效果1024×768像素
說明:SP(Service Pack為Windows操作系統(tǒng)補丁。2.5程序文件清單 2.5.1數(shù)據(jù)庫模塊
數(shù)據(jù)庫名運行平臺編程語言簡要描述 TongXunLu Sql2005SQL Contact表跟Users表
三、模塊分析及設計 3.1系統(tǒng)功能結(jié)構(gòu)圖
通訊錄管理系統(tǒng) 注冊側(cè) 登錄 顯示全部 添加查找修改刪 除 退出系統(tǒng)
3.2系統(tǒng)數(shù)據(jù)流程圖 用戶 注冊登錄 通訊錄管理系統(tǒng) 通訊錄管理系統(tǒng)主界面 顯示全部查 找 記 錄 修 改 記
錄 刪 除 記 錄 退 出 系 統(tǒng)
四、數(shù)據(jù)庫設計 4.1數(shù)據(jù)庫需求分析
1針對通訊錄管理系統(tǒng),分別對用戶登錄、添加通訊錄和查找、刪除以及修改數(shù)據(jù)進行詳細的調(diào)研和分析,總結(jié)出如下的需求信息: 1.每條原始記錄要有姓名、生日、電話、郵箱、地址信息,其中姓
名不能為空。
2.保證查詢到的數(shù)據(jù)與姓名相一致 3.根據(jù)相應姓名刪除對應的全部數(shù)據(jù)
2本數(shù)據(jù)用于登錄用戶實體以及通訊錄信息實體 4.2E-R 圖
用戶 用戶名密碼 信息 操作 N 1 姓名 生日 郵箱 電話 地址
4.3數(shù)據(jù)表設計
·數(shù)據(jù)庫名稱:TongXunLu,共有2個表:
1、用戶表(Users
2、通訊錄聯(lián)系表(Contact 4.3.1登錄用戶信息表(Users
4.3.2通訊錄信息表(Contact
五、制作過程及要點 5.1IsExist類
開發(fā)項目時,以類的形式來組織、封裝一些常用的方法和事件,以便提高代碼的重用率,大大方便了代碼的管理。本系統(tǒng)中創(chuàng)建了一個公共類:IsExist.cs,主要是用來判斷后臺數(shù)據(jù)庫里是否存在用戶輸入 的內(nèi)容如果存在就返回true,否則返回false。using System;using System.Collections.Generic;using System.Text;using System.Data.SqlClient;namespace TongXun { class IsExist { public bool isNameExist(string str { string checkString=“select*from Contact where姓名='”+str+“'”;SqlConnection sqlcon=new SqlConnection(;sqlcon.ConnectionString=“Initial Catalog=TongXunLu;Data Source=(local;Integrated Security=true”;SqlCommand sqlcmd=new SqlCommand(;
sqlcon.Open(;sqlcmd.CommandText=checkString;sqlcmd.Connection=sqlcon;SqlDataReader dr=sqlcmd.ExecuteReader(;if(dr.HasRows { return true;} else return false;} } } 5.2用戶登錄與注冊模塊詳細設計 初始登錄注冊界面 以下為初始界面:
主要代碼實現(xiàn)如下: namespace TongXun { public partial class Login:Form { private Input_Check ckInput=new Input_Check(;public Login({ InitializeComponent(;}
private void Form1_Load(object sender,EventArgs e { } private void register_btn_Click(object sender,EventArgs e { Register_Form reg=new Register_Form(;reg.Show(;this.Hide(;} private void login_btn_Click(object sender,EventArgs e { if(!ckInput.UserNameCheck(textBox_name.Text||!ckInput.PassWordCheck(textBox_pwd.Text { MessageBox.Show(“您輸入的用戶名或密碼格式錯誤!請查正后輸入?!?return;}
string checkString=“select*from Users where UsersName='”+textBox_name.Text+“'and UsersPwd='”+textBox_pwd.Text+“'”;try { SqlConnection sqlcon=new SqlConnection(;sqlcon.ConnectionString=“Initial Catalog=TongXunLu;Data Source=(local;Integrated Security=true”;SqlCommand sqlcmd=new SqlCommand(;sqlcon.Open(;sqlcmd.CommandText=checkString;sqlcmd.Connection=sqlcon;SqlDataReader dr=sqlcmd.ExecuteReader(;if(dr.HasRows { Home HomePage=new Home(;HomePage.Show(;this.Hide(;} else
{ MessageBox.Show(“用戶名或密碼錯誤!”;} } catch(Exception error { MessageBox.Show(error.ToString(;} } //檢驗輸入數(shù)據(jù)正確性 public class Input_Check { public bool UserNameCheck(string strInput { Regex re=new Regex(@“^[a-zA-Z]w{0,15}$”;if(!re.IsMatch(strInput { return false;}
return true;} public bool PassWordCheck(string strInput { Regex re=new Regex(@“^{0,20}$”;if(!re.IsMatch(strInput { return false;} return true;} } private void textBox_pwd_KeyPress(object sender,KeyPressEventArgs e { if(e.KeyChar==13 { if(!ckInput.UserNameCheck(textBox_name.Text ||!ckInput.PassWordCheck(textBox_pwd.Text {
MessageBox.Show(“您輸入的用戶名或密碼格式錯誤!請查正后輸入?!?return;} string checkString=“select*from Users where UsersName='”+ textBox_name.Text+“'and UsersPwd='”+textBox_pwd.Text+“'”;try { SqlConnection sqlcon=new SqlConnection(;sqlcon.ConnectionString=“Initial Catalog=TongXunLu;Data Source=(local;Integrated Security=true”;SqlCommand sqlcmd=new SqlCommand(;sqlcon.Open(;sqlcmd.CommandText=checkString;sqlcmd.Connection=sqlcon;SqlDataReader dr=sqlcmd.ExecuteReader(;if(dr.HasRows { Home HomePage=new Home(;HomePage.Show(;
this.Hide(;} else { MessageBox.Show(“用戶名或密碼錯誤!”;} } catch(Exception error { MessageBox.Show(error.ToString(;} } } } } 注冊中顯示的界面:
主要代碼實現(xiàn)如下: namespace TongXun { public partial class Register_Form:Form { public Input_Check ckInput=new Input_Check(;public Register_Form({ InitializeComponent(;} private void button_confirm_Click(object sender,EventArgs e {
if(!ckInput.UserNameCheck(textBox_name.Text { MessageBox.Show(“請輸入合法用戶名!”;textBox_name.Focus(;return;} else if(!ckInput.PassWordCheck(textBox_pwd.Text { MessageBox.Show(“請輸入符合要求的密碼!”;return;} else if(textBox_pwd.Text!=textBox_ensurePwd.Text { MessageBox.Show(“兩次密碼輸入不同,請重新輸入!”;textBox_ensurePwd.Focus(;textBox_pwd.Focus(;} //若輸入無誤,則與后臺數(shù)據(jù)庫同步 SqlConnection conn=new SqlConnection(;
conn.ConnectionString=“initial catalog=TongXunLu;Data Source=(local;integrated security=true;”;conn.Open(;SqlCommand cmd=conn.CreateCommand(;string RegisterString=“INSERT INTO Users(UsersName,UsersPwd VALUES('”+textBox_name.Text+“','”+textBox_pwd.Text+“'”;cmd.CommandText=RegisterString;cmd.ExecuteNonQuery(;MessageBox.Show(“注冊成功!”;this.Close(;Login log=new Login(;log.Show(;} //檢驗輸入數(shù)據(jù)正確性 public class Input_Check { public bool UserNameCheck(string strInput { Regex re=new Regex(@“^[a-zA-Z]w{0,15}$”;
if(!re.IsMatch(strInput { return false;} return true;} public bool PassWordCheck(string strInput { Regex re=new Regex(@“^{0,20}$”;if(!re.IsMatch(strInput { return false;} return true;} } private void button_cancel_Click(object sender,EventArgs e { Login L=new Login(;L.Show(;
this.Hide(;} } } 5.3系統(tǒng)主界面設計 主界面運行截圖如下:
主要代碼實現(xiàn)如下: private void button_cancel_Click(object sender,EventArgs e { this.panel_Delete.Show(;
this.panel_WeIcome.Show(;} 5.4通訊錄“顯示全部”模塊
用戶進入主界面之后,點擊顯示全部按鈕,則系統(tǒng)將數(shù)據(jù)庫中數(shù)存儲的所有聯(lián)系人的記錄顯示到dataGridView2界面中,按照一定的規(guī)格排列。其中各項中的數(shù)據(jù)則嚴格按照數(shù)據(jù)庫中的要求排列顯示。
顯示全部功能截圖如下:
主要代碼實現(xiàn)如下: private void button_ShowAll_Click(object sender,EventArgs e {
this.panel_ShowAll.Show(;this.panel_add.Hide(;this.panel_Search.Hide(;this.panel_Modify.Hide(;this.panel_Delete.Hide(;this.panel_WeIcome.Hide(;SqlConnection conn=new SqlConnection(;conn.ConnectionString=“initial catalog=TongXunLu;Data Source=(local;integrated security=true;”;conn.Open(;//創(chuàng)建SqlDataAdapter對象實例
SqlDataAdapter dataSelect=new SqlDataAdapter(“select*from Contact ”,conn;//創(chuàng)建DataTable對象實例 DataTable dt=new DataTable(;dataSelect.Fill(dt;//填充控件
dataGridView2.DataSource=dt.DefaultView;this.dataGridView2.RowHeadersVisible=true;conn.Close(;
} 5.5通訊錄“添加”模塊
用戶進入通訊錄系統(tǒng)主界面,點擊添加,進行通訊錄的添加操作,填寫相應的內(nèi)容,系統(tǒng)會自動判定是否符合規(guī)定要求,例如姓名、生日、年齡、電話號碼、地址不能為空,相應屬性的字段長度不能超出范圍,郵箱格式要符合要求??捎靡讯x的Input_Check類中EmailCheck(方法進行檢驗。相關(guān)運行界面如下:
主要代碼實現(xiàn)如下: private void button_add_Click(object sender,EventArgs e { if(textBox_Name.Text==“" {
MessageBox.Show(”請確認姓名輸入是否正確!“;return;} else if(!ckInput.PassWordCheck(textBox_birth.Text { MessageBox.Show(”請確認生日日期是否正確!“;return;} else if(!ckInput.PassWordCheck(textBox_phoneNum.Text { MessageBox.Show(”請確認電話號碼是否正確!“;return;} else if(!ckInput.EmailCheck(textBox_Mail.Text { MessageBox.Show(”請確認電子郵箱格式是否正確!“;return;} else if(textBox_Address.Text==”“
{ MessageBox.Show(”地址不能為空!“;} else { SqlConnection conn=new SqlConnection(;conn.ConnectionString=”initial catalog=TongXunLu;Data Source=(local;integrated security=true;“;conn.Open(;SqlCommand cmd=conn.CreateCommand(;string AddString=”INSERT INTO Contact(姓名,生日,電話,郵箱,地址
VALUES('“+textBox_Name.Text+”','“+textBox_birth.Text+”','“+textBox_phoneNum.Text+ ”','“+textBox_Mail.Text+”','“+textBox_Address.Text+”'“;cmd.CommandText=AddString;cmd.ExecuteNonQuery(;MessageBox.Show(”添加聯(lián)系人成功!“;conn.Close(;textBox_Name.Clear(;textBox_birth.Clear(;textBox_phoneNum.Clear(;
textBox_Mail.Clear(;textBox_Address.Clear(;} 5.6通訊錄“查找”模塊
按姓名查找,若數(shù)據(jù)庫中有要查找的記錄則通過dataGridView1顯示
出來,若不存在該記錄則返回“沒有您要查找的內(nèi)容!”的消息框。相關(guān)截圖如下:
主要代碼實現(xiàn)如下: private void button_Search_Click(object sender,EventArgs e { try
{ if(textBox_SearchName.Text==”“ { MessageBox.Show(”查找的姓名不能為空!“;} else if(textBox_SearchName.Text!= ”“&&ise.isNameExist(textBox_SearchName.Text { string searchString=”select*from Contact where姓名='“+ textBox_SearchName.Text+”'“;SqlConnection conn=new SqlConnection(;conn.ConnectionString=”initial catalog=TongXunLu;Data Source=(local;integrated security=true;“;conn.Open(;//創(chuàng)建SqlDataAdapter對象實例
SqlDataAdapter dataSelect=new SqlDataAdapter(searchString,conn;//創(chuàng)建DataTable對象實例 DataTable dt=new DataTable(;dataSelect.Fill(dt;//填充控件
dataGridView_Search.DataSource=dt.DefaultView;this.dataGridView_Search.RowHeadersVisible=true;conn.Close(;textBox_SearchName.Clear(;} else { MessageBox.Show(”沒有您要查找的內(nèi)容!“;textBox_SearchName.Text=”“;textBox_SearchName.Focus(;} } catch(Exception exc { MessageBox.Show(exc.ToString(;} } 5.7通訊錄“修改”模塊
要修改的記錄必需是數(shù)據(jù)庫中已存在的記錄。
主要代碼實現(xiàn)如下: private void button_Modify_Click(object sender,EventArgs e { if(textBox_ModName.Text==”“ { MessageBox.Show(”請輸入要修改的姓名!“;} else if(textBox_ModName.Text!=”“&& ise.isNameExist(textBox_ModName.Text { SqlConnection conn=new SqlConnection(;
conn.ConnectionString=”initial catalog=TongXunLu;Data Source=(local;integrated security=true;“;conn.Open(;SqlCommand cmd=conn.CreateCommand(;string ModifyString=”UPDATE Contact SET姓名='“+ textBox_ModName.Text+”',“+”生日='“+textBox_ModBirthDay.Text+”',“+”電話='“+ textBox_ModPhone.Text+”',“+”郵箱='“+textBox_ModMail.Text+”',“+”地址='“+ textBox_ModAddress.Text+”'where姓名='“+textBox_ModName.Text+”'“;cmd.CommandText=ModifyString;cmd.ExecuteNonQuery(;MessageBox.Show(”修改成功!“;textBox_ModName.Clear(;textBox_ModBirthDay.Clear(;textBox_ModPhone.Clear(;textBox_ModMail.Clear(;textBox_ModAddress.Clear(;} else { MessageBox.Show(”您要修改的記錄不存在!“;
textBox_ModName.Clear(;textBox_ModBirthDay.Clear(;textBox_ModPhone.Clear(;textBox_ModMail.Clear(;textBox_ModAddress.Clear(;} } 5.8通訊錄“刪除”模塊
在TextBox中輸入要刪除的記錄的姓名,確認刪除后連接數(shù)據(jù)庫進行刪除記錄。若該記錄不存在則返回提示信息,若操作成功,則返回“刪除成功”的信息框提示?!胺祷厥醉摗卑粹o則實現(xiàn)返回到登錄時的界面。
主要代碼實現(xiàn)如下: private void button_delete_Click(object sender,EventArgs e { if(textBox_deleName.Text==”“ { MessageBox.Show(”請輸入要刪除的姓名!“;} else if(textBox_deleName.Text!=”“&& ise.isNameExist(textBox_deleName.Text { SqlConnection conn=new SqlConnection(;
conn.ConnectionString=”initial catalog=TongXunLu;Data Source=(local;integrated security=true;“;conn.Open(;SqlCommand cmd=conn.CreateCommand(;string ModifyString=”DELETE FROM Contact WHERE姓名='“+ textBox_deleName.Text+”'“;cmd.CommandText=ModifyString;cmd.ExecuteNonQuery(;MessageBox.Show(”刪除成功!“;textBox_deleName.Text=”“;} else {MessageBox.Show(”您輸入的姓名不存在!“;textBox_deleName.Text = ”";} }
六、設計總結(jié) 這次的課程設計是對我們這學期 c#學習的一次大檢驗。自己動 手,自己發(fā)現(xiàn)和解決問題。發(fā)現(xiàn)了自己的許多不足。平時沒有掌握好 的知識在這次課程設計中徹底暴露出來,經(jīng)過不斷思考,不斷查閱資 料和上機運行,解決其中大部分問題,當然還存在一些問題沒有解決。我相信在以后的學習能夠解決好它們。當然從這次課程設計使我們學 到了以前沒有學過的很多知識,在具體的程序?qū)嵺`中主要是對數(shù)據(jù)庫 連接和一些控件的應用有了更深的認識。使我們對 VS 程序設計有了 更深層次的認識和理解,懂得了 VS 窗體應用程序基本設計流程和 SQL Server 2000 數(shù)據(jù)庫設計。這次我們是小組作業(yè),為了使各自做的界面能夠更
好的結(jié)合到一 起,我們這次設計的數(shù)據(jù)庫比較簡單。我們分工合作最后共同努力把 程序的基本功能基本上都實現(xiàn)了。我們通過對課本的研究,通過幾天 的努力終于將已經(jīng)完成了的程序在界面是進行了美化,可以使用戶在 使用的時候能夠賞心悅目。最后,在此由衷的向我的指導老師們表示衷心的感謝,是他們的 悉心指導和嚴格要求,才使我的課程設計有了較為完善的一面,才有
5-了我能力的提高,得到了充分的鍛煉。
七、主要參考書及手冊 [1] 李海濤,Visual Studio.NET 2008 開發(fā)一冊通。化學工業(yè)出版社,2010 年 [2] 江維華,江維清,C#.NET 程序設計使用教程,人民郵電出版社,2007 年 [3] 明日科技,Visual C#開發(fā)技術(shù)大全,人民郵電出版社,2007 年 [4](美James Foxall,Visual C# 2008 入門經(jīng)典,人民郵電出版社,2009 年
第二篇:數(shù)據(jù)結(jié)構(gòu)課程設計—java通訊錄管理系統(tǒng)
import java.io.*;import java.util.*;public class LittleProgram {
static boolean isDelete = true;
static boolean isFind = true;
public static void main(String [] args)//主方法,程序從這里開始運行
throws IOException,NumberNotFoundException
{
int choice=-1;
do{
LittleProgram lp = new LittleProgram();
System.out.println();
System.out.println(“t
#”);
System.out.println();
System.out.println(“tt通訊錄管理系統(tǒng)”);
System.out.println(“t
請用號碼插入,查找,修改,刪除數(shù)據(jù)”);
System.out.println();
System.out.println(“t
#n”);
System.out.print(“1.增加號碼:n”+
“2.查找號碼:n”+
“3.刪除號碼:n”+ “4.清除所有號碼:n”+ “5.把號碼全部打印到屏幕n”+ “6.把通訊錄按號碼排序n”+
“7.修改號碼n”+
“8.統(tǒng)計通碼訊錄的總?cè)藬?shù)n”+
“9.關(guān)于作者n”+
“0.退出程序.n” +
“輸入:”);
BufferedReader in =
//從終
new BufferedReader(//端接
new InputStreamReader(System.in));//收數(shù)
String inputLine = in.readLine();
//字選
choice= Integer.valueOf(inputLine).intValue();//項;
switch(choice)
{
case 1: {//1.增加號碼
String str = lp.inputData();
lp.addData(str);
System.out.println(“增加號碼成功.”);
timeOut(1);
}break;
case 2: {//2.查找號碼
long find = 0;
System.out.print(“請輸入你要查找的號碼:”);
BufferedReader inn =
new BufferedReader(new InputStreamReader(System.in));
String inputLi = inn.readLine();
find = Integer.valueOf(inputLi).longValue();
lp.findData(find);
timeOut(2);
}break;
case 3: {//3.刪除號碼
long deleteNumber = 0;
System.out.print(“請輸入你想刪除號碼:”);
BufferedReader bf =
new BufferedReader(new InputStreamReader(System.in));
String inputL = bf.readLine();
deleteNumber = Integer.valueOf(inputL).longValue();
lp.deleteData(deleteNumber);
if(isDelete)
System.out.println(“刪除號碼成功!”);
timeOut(1);
}break;
case 4: {
lp.clearData();//4.清除所有號碼
timeOut(1);
}break;
case 5: {
print();//5.把號碼全部打印到屏幕
timeOut(2);
}break;
case 6: {
lp.numSort();//6.把號碼按號碼排序
System.out.println(“按照號碼從小到大排序成功!n”+
“排序后:n”);
print();
timeOut(2);
}break;
case 7: {
lp.rewrite();//7.修改號碼
timeOut(2);
}break;
case 8: {
int count = lp.count();
System.out.println(“共有”+count+“個號碼記錄.”);
timeOut(2);
}break;
case 9: {
System.out.print(“tt李雪萍n”+
“tt安徽理工大學理學院n”+
“ttQQ:1154646392n”);
timeOut(4);
}break;
}}while(choice!= 0);
System.out.println(“Bye!^-^”);
System.exit(0);
}
public String inputData()//從終端接收數(shù)據(jù)的方法,返回字符串
throws IOException,NumberFormatException
{
System.out.print(“請依次輸入 :號碼 姓名 地址 生日n” +
“每項數(shù)據(jù)請用空格隔開:”);
String all = “";
try{
BufferedReader in =
//從終
new BufferedReader(//端接
new InputStreamReader(System.in));
//收數(shù)
String inputLine = in.readLine();
//據(jù)
StringTokenizer str =
new StringTokenizer(inputLine,” “);//接收的數(shù)據(jù)用空格隔開,這個類用來提取每個字符串
long num = Integer.valueOf(str.nextToken()).longValue();//號碼
String name =(String)str.nextToken();
//姓名
String add =(String)str.nextToken();
// 地址
String birth =(String)str.nextToken();//出生年月
all = String.valueOf(num)+” , “+
name +” , “+
add +” , “+
String.valueOf(birth);//把所有的數(shù)據(jù)用” , “隔開然后在連起來放進字符串a(chǎn)ll
}catch(IOException e){}
catch(NumberFormatException e){}
return all;//返回字符串a(chǎn)ll
}
public void addData(String str)//增加號碼的方法
throws IOException
{
String s1 =”“,s2=”“ ,s3= ”“;
File file = new File(”c:data.txt“);
if(file.exists())//如果文件data.txt存在 {
try{
BufferedReader in =
new BufferedReader(new FileReader(file));
while((s1=in.readLine())!=null)
s2+=s1+”n“;//把文件中的每行數(shù)據(jù)全部放進一個字符串s2
s2+=str+”n“;
//再把s2于形參str相連放進s2
BufferedReader in2 =
//把字符
new BufferedReader(//串s2也
new StringReader(s2));
//就是原
PrintWriter out =
//文件+
new PrintWriter(//形參str(新輸入的一行數(shù)據(jù))
new BufferedWriter(//重新寫進data.txt
new FileWriter(file)));
//覆蓋原來的數(shù)據(jù)
while((s3=in2.readLine())!= null)
{
out.println(s3);
}
out.close();
//System.out.println(”write data true.“);
}catch(IOException e){}
}else{
System.err.println(”File “data” Missing!“);
}
}
public void clearData()//清除data.txt的所有數(shù)據(jù)的方法
throws IOException
{
File file = new File(”c:data.txt“);
if(file.exists())//如果文件在{
try{
PrintWriter out =
new PrintWriter(new BufferedWriter(new FileWriter(file)));
out.print(”“);//在文件data.txt里寫進一個空字符,所以清除了原來的內(nèi)容
out.close();//關(guān)閉文件
System.out.println(”clear data true!“);
}catch(IOException e){}
}else{
System.err.println(”File “data” Missing!“);
}
}
public void deleteData(long deleteNumber)//刪除某條號碼數(shù)據(jù)
throws IOException,FileNotFoundException
{
isDelete = true;
try{
DataMap mp = new DataMap();//生成一個自己編寫的容器
long j=0;
String s1=”“,s2=”“,s3=”“;
BufferedReader in =
new BufferedReader(new FileReader(”c:data.txt“));
while((s1=in.readLine())!=null)
{
j=numberTokenizer(s1);
mp.put(j,s1);
}
try{
if(mp.containsKey(String.valueOf(deleteNumber).toString()))
{
mp.remove(deleteNumber);
}else
throw new NumberNotFoundException();
Collection c = mp.values();
Iterator iter = c.iterator();
while(iter.hasNext())
{
s1 =(String)iter.next();
s3 +=s1+”n“;
}
BufferedReader in2 =
new BufferedReader(new StringReader(s3));
PrintWriter out =
new PrintWriter(new BufferedWriter(new FileWriter(”c:data.txt“)));
//System.out.println(”delete No“+deleteNumber);
while((s1 = in2.readLine())!=null)
{
out.println(s1);
} out.close();}catch(NumberNotFoundException e){
isDelete = false;
System.out.println(deleteNumber+” no found :(“);
}
}catch(IOException e){}
}
public long numberTokenizer(String s)
throws IOException
{
StringTokenizer st =
new StringTokenizer(s,” “);
return Integer.valueOf((st.nextToken())).longValue();
}
public void findData(long find)//查找數(shù)據(jù)
throws IOException,NumberNotFoundException
{
isFind = true;
String s = ”“,findString =”“;long i;DataMap dm = new DataMap();BufferedReader in =
new BufferedReader(new FileReader(”c:data.txt“));
while((s=in.readLine())!=null)
{
i=numberTokenizer(s);
dm.put(i,s);
}
//in.close();
try{
if(dm.containsKey(String.valueOf(find).toString()))
{
findString = dm.get(find);
System.out.println(”學號“+find+”學生的資料是:“);
System.out.println(findString);
}else
throw new NumberNotFoundException();
}catch(NumberNotFoundException e){
System.out.println(find+” no found :(“);
isFind = false;
}
}
public static void print()//讀取文本文件把數(shù)據(jù)打印到終端的方法
throws IOException
{
try{
BufferedReader in =
new BufferedReader(new FileReader(”c:data.txt“));
String read = ”“;
while((read = in.readLine())!=null)
System.out.println(read);
}catch(IOException e){}
}
public static void timeOut(double sec)//停頓短暫時間的一個方法完全可以不要這個功能
{
double seconds = sec;
long t = System.currentTimeMillis()+(int)(seconds*1000);
while((System.currentTimeMillis()) ; } public void numSort()//按學號排序 throws IOException { long i = 0; String s = ”“; try{ DataArrayList dal = new DataArrayList(); BufferedReader in = new BufferedReader(new FileReader(”c:data.txt“)); while((s=in.readLine())!=null) { i=numberTokenizer(s); dal.add(i); } Collections.sort(dal); DataMap dm = new DataMap(); BufferedReader in2 = new BufferedReader(new FileReader(”c:data.txt“)); while((s=in2.readLine())!=null) { i=numberTokenizer(s); dm.put(i,s); } PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(”c:data.txt“))); Iterator it = dal.iterator(); long temp = 0; String tempStr = ”“; while(it.hasNext()) { temp = Integer.valueOf((String)it.next()).longValue(); tempStr = dm.get(temp); out.println(tempStr); } out.close(); }catch(IOException e){} } public void rewrite() throws IOException,NumberNotFoundException { try{ System.out.print(”請輸入你要修改的學生號碼:“); BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); String inputLine = in.readLine(); long num = Integer.valueOf(inputLine).longValue(); findData(num); if(isFind) { deleteData(num);System.out.print(”請重新輸入該號碼:“);String str = inputData(); addData(str); System.out.println(”rewrite true!“); } }catch(IOException e){} catch(NumberNotFoundException e){} } public int count() throws IOException { DataArrayList dal = new DataArrayList(); try{ String s = ”“; long i =0; BufferedReader in = new BufferedReader(new FileReader(”c:data.txt“)); while((s=in.readLine())!=null) { i=numberTokenizer(s); dal.add(i); } }catch(IOException e){} return dal.size(); } } /* * * @author RangWei * TODO 這是個寫的一個容器,繼承公共類HashMap * 大概的功能就相當一個數(shù)組 * */ class DataMap extends HashMap//一個存儲數(shù)據(jù)的Map { public void put(long i,String str)//把學號和數(shù)據(jù)放進這個Map { //以后一個學號(key)對應的是一個人的數(shù)據(jù)(value) put(String.valueOf(i).toString(),str); } public void remove(long i)//接收學號,然后刪除學號(key)和它對應的數(shù)據(jù)(value) { remove(String.valueOf(i).toString().toString()); } public String get(long i)//接收一個學號,然后返回這個key對應的value { String s = String.valueOf(i).toString(); if(!containsKey(s)) { System.err.println(”Not found Key: "+s); } return(String)get(s); } } /* * * @author RangWei * * TODO 這個類繼承ArrayList * 用來按數(shù)字排序,在用號碼排序時要用到它 * */ class DataArrayList extends ArrayList { public void add(long num) { String numToString = String.valueOf(num).toString(); add(numToString); } } /* * * @author RangWei * * TODO 增加的一個Exception,主要是在文件里沒有要找 * 的號碼就拋出 * */ class NumberNotFoundException extends Exception { public NumberNotFoundException() {} } 信息科學與技術(shù)學院 程序設計基礎(chǔ)課程設計報告 題目名稱: 通信管理系統(tǒng) 學生姓名: 學 號: 專業(yè)班級: 指導教師: 2016年 12月 31日 目錄 1.課程設計題目與要求........................1 1.1設計題目..........................................1 1.2設計要求..........................................1 2.總體設計..................................2 2.1 總體功能框架......................................2 2.2 數(shù)據(jù)結(jié)構(gòu)概要設計..................................2 3.詳細設計..................................3 3.1 數(shù)據(jù)結(jié)構(gòu)詳細設計..................................3 3.2 系統(tǒng)功能詳細設計.................................10 4.運行結(jié)果.................................16 5.課程設計總結(jié).............................20 5.1 編程中的問題及解決方法...........................20 5.2 小結(jié).............................................20 5.3 心得體會.........................................20 5.4 程序設計方法.....................................20 參考文獻...................................21 1.課程設計題目與要求 1.1設計題目 通信管理系統(tǒng) 1.2設計要求 用C/C++設計出模擬手機通信錄管理系統(tǒng),實現(xiàn)對手機中的通信錄進行管理。 (一)功能要求 (1)查看功能:選擇此功能時,列出下列三類選擇。 A 辦公類 B 個人類 C 商務類,當選中某類時,顯示出此類所有數(shù)據(jù)中的姓名和電話號碼) (2)增加功能:能錄入新數(shù)據(jù)(一個結(jié)點包括:姓名、電話號碼、分類(可選項有:A 辦公類 B 個人類 C 商務類)、電子郵件)。例如 楊春 *** 商務類 Chuny@126.C++om 當錄入了重復的姓名和電話號碼時,則提示數(shù)據(jù)錄入重復并取消錄入;當通信錄中超過15條信息時,存儲空間已滿,不能再錄入新數(shù)據(jù);錄入的新數(shù)據(jù)能按遞增的順序自動進行條目編號。 (3)拔號功能:能顯示通信錄中所有人姓名,當選中某個姓名時,屏幕上模擬打字機的效果依次顯示此人電話號碼中的各個數(shù)字,并伴隨相應的拔號聲音。 (4)修改功能:選中某個人的姓名時,可對此人的相應數(shù)據(jù)進行修改(5)刪除功能:選中某個人的姓名時,可對此人的相應數(shù)據(jù)進行刪除,并自動調(diào)整后續(xù)條目的編號。 (二)其它要求: (1)只能使用C/C++語言,源程序要有適當?shù)淖⑨專钩绦蛉菀组喿x(2)至少采用文本菜單界面(如果能采用圖形菜單界面更好)(3)建議使用結(jié)構(gòu)和鏈表等數(shù)據(jù)結(jié)構(gòu) (4)學生可自動增加新功能模塊(視情況可另外加分)2.總體設計 2.1 總體功能框架 新增聯(lián)系人查看通信錄撥號 功能模塊 修改信息刪除聯(lián)系人導入通信錄導出通信錄 退出系統(tǒng) 圖 2-1 總體功能框架圖 2.2 數(shù)據(jù)結(jié)構(gòu)概要設計 本通信管理系統(tǒng)采用的數(shù)據(jù)結(jié)構(gòu)為線性表中的鏈表。鏈表的結(jié)構(gòu)體成員分為數(shù)據(jù)域和指針域。數(shù)據(jù)域為聯(lián)系人(contacts)結(jié)構(gòu)體,成員有聯(lián)系人姓名(name)、聯(lián)系人電話號碼(teleNum)、聯(lián)系人類別(classes)、電子郵件(email)四個。 圖 2-2 數(shù)據(jù)結(jié)構(gòu)組成 3.詳細設計 3.1 數(shù)據(jù)結(jié)構(gòu)詳細設計 結(jié)構(gòu)體名稱:contact,LNode,*LinkList typedef struct { string name;//姓名 string teleNum;//電話號碼 int classes;//分類 string email;//電子郵件 }contacts; typedef struct LNode { contacts data;//數(shù)據(jù)域 struct LNode* next;//指針域 }LNode,*LinkList; 具體操作: InitList(&L)操作結(jié)果:初始化鏈表 具體代碼: int InitList(LinkList &L){ L = new LNode;L->next = NULL;return 0;} CreateList_H(&L,n)操作結(jié)果:前插法創(chuàng)建一個鏈表 具體代碼: void CreateList_H(LinkList &L,int n){ LinkList p;for(int i = 0;i < n;i++)//根據(jù)聯(lián)系人個數(shù)創(chuàng)建鏈表 { p = new LNode;cout <<“請輸入聯(lián)系人的姓名:”; cin >> p->data.name;cout <<“請輸入聯(lián)系人的電話號碼:”;cin >> p->data.teleNum;cout <<“請輸入聯(lián)系人的分類(分類如下,輸入相應序號即可)”<< endl;cout <<“1 辦公類 2 個人類 3 商務類”<< endl;cin >> p->data.classes;cout <<“請輸入聯(lián)系人的電子郵件:”;cin >> p->data.email;p->next = L->next;L->next=p;} } CheckAll(L,c) 操作結(jié)果:顯示類別為c的聯(lián)系人姓名和電話號碼 具體代碼: void CheckAll(LinkList L,int c)//c是聯(lián)系人類別 { LinkList p; p = L->next; cout <<“姓名tt”<<“電話號碼”<< endl;//表頭 while(p)//當鏈表沒到尾部時 { if(p->data.classes==c)//若符合類別則輸出聯(lián)系人姓名和電話號碼 { cout << p->data.name <<“tt”<< p->data.teleNum << endl; } p=p->next; } } CheckAll(L) 操作結(jié)果:顯示已有聯(lián)系人的姓名 具體代碼: void CheckAll(LinkList L){ LinkList p;p=L->next;while(p) { cout << p->data.name << endl;p=p->next;} } Search(L, name) 操作結(jié)果:找到名為name的聯(lián)系人位置 具體代碼: LinkList Search(LinkList L,string name){ LinkList p;p=L->next;while(p&&p->data.name!=name)//當鏈表沒到尾部且沒找到聯(lián)系人時 { p=p->next;} return p;} IfExist(L, c)操作結(jié)果:判斷是否存在聯(lián)系人contacts 具體代碼: char IfExist(LinkList L,contacts c){ LinkList p;p=L->next;while(p&&p->data.name!=c.name)//根據(jù)姓名查找是否存在該聯(lián)系人 { p=p->next;} if(!p)//若到達鏈表尾部,則不存在 return 'n';if(p->data.teleNum==c.teleNum)//若找到聯(lián)系人姓名 if(p->data.classes==c.classes)//依次判斷電話號碼、類別、電子郵件是否相同 if(p->data.email==c.email)return 'y';return 'n';} Length(L) 操作結(jié)果:獲取鏈表的長度 具體代碼: int Length(LinkList L){ int i=0;LinkList p=L->next;while(p){ ++i;p=p->next;} return i;} Add(&L, c)操作結(jié)果:把contacts添加到鏈表中 具體代碼: int Add(LinkList &L,contacts c){ LinkList p,s;if(Length(L)>=MAXSIZE)//判斷鏈表長度是否達到最大值 { cout <<“存儲空間已滿,無法新增聯(lián)系人!”<< endl;return 0;} if(IfExist(L,c)=='y')//判斷輸入的聯(lián)系人是否已經(jīng)存在 { cout <<“對不起,您輸入的聯(lián)系人已存在!”<< endl;return 0;} //若通訊錄中不存在該聯(lián)系人,則增加到通信錄 p=L;s=new LNode;s->data=c;s->next=p->next;p->next=s;return 0;} Dail(L,name) 操作結(jié)果:撥打姓名為name的聯(lián)系人的電話 具體代碼: void Dail(LinkList L,string name){ LinkList p,s;p=L->next;s=Search(L,name);//根據(jù)姓名查找聯(lián)系人所在 //模擬打字機效果,輸出聯(lián)系人電話號碼 string tele=s->data.teleNum;for(int i=0;i cout << endl;//播放聲音 PlaySound(“E:670.wav”,NULL,SND_FILENAME|SND_ASYNC);} ChangeInfo(&L,name)操作結(jié)果:修改姓名為name的聯(lián)系人的信息 具體代碼: void ChangeInfo(LinkList &L,string name){ LinkList p;p=Search(L,name);//找到聯(lián)系人的位置所在 cout <<“ 請輸入要修改的信息(輸入對應序號即可):”<< endl;cout <<“1 姓名”<< endl;cout <<“2 電話號碼”<< endl;cout <<“3 分類”<< endl;cout <<“4 電子郵件”<< endl; //根據(jù)選擇修改聯(lián)系人信息 int elec;cin >> elec;switch(elec){ case 1: { cout <<“姓名改為:”<< endl;string newName;cin >> newName;p->data.name=newName;break;} case 2: { cout <<“電話號碼改為:”< cout <<“分類改為(分類如下,輸入相應序號即可)”;cout <<“1 辦公類 2 個人類 3 商務類”<< endl;int newCalsses;cin >> newCalsses;p->data.classes=newCalsses;break;} case 4: { cout <<“電子郵件改為:”<< endl;string newEmail;cin >> newEmail;p->data.email=newEmail;break;} } } Delete(&L,name)操作結(jié)果:刪除姓名為name的聯(lián)系人 具體代碼: void Delete(LinkList &L,string name){ LinkList p=L,s;//找到需刪除聯(lián)系人的前一個位置 while(p->next&&p->next->data.name!=name){ p=p->next;} s=p->next;p->next=s->next;delete s;//刪除聯(lián)系人 } Read(L)操作結(jié)果:從文件中讀入信息到鏈表 具體代碼: void Read(LinkList L){ LinkList p; //打開文件導入通信錄 ifstream fin;fin.open(“通信錄.txt”,ios::in);string s1,s2,s3,s4;fin >> s1 >> s2 >> s3 >> s4; while(!fin.eof())//當沒有到文件尾時 { string s5; contacts c; fin >> c.name >> c.teleNum >> s5 >> c.email; if(s5.compare(“辦公類”)==0) c.classes=1; if(s5.compare(“個人類”)==0) c.classes=2; if(s5.compare(“商務類”)==0) c.classes=3; Add(L,c);//將聯(lián)系人c增加到鏈表中 } fin.close();} 操作結(jié)果:將所有聯(lián)系人導出到文件里保存 具體代碼: void Write(LinkList L)Write(L){ endl; } LinkList p=L->next;int l=Length(L);//打開文件寫入通信錄 ofstream fout(“通信錄.txt”,ios::out|ios::trunc);fout <<“姓名t”<<“電話號碼t”<<“分類t”<<“電子郵件 ”<< for(int i=0;i case 1: { fout <<“辦公類”; break; } case 2: { fout <<“個人類”; break; } case 3: { fout <<“商務類”; break; } } fout <<“t”<< p->data.email;if(i<(l-1)) fout << endl;p=p->next;} fout.close();3.2 系統(tǒng)功能詳細設計 3.2.1 文件數(shù)據(jù)讀出(1)函數(shù)原型: void CreateList_H(LinkList &L,int n)(2)函數(shù)功能: 創(chuàng)建鏈表,給鏈表增加n個聯(lián)系人 (3)函數(shù)形參: CreateList_H(&L,n),其中L是鏈表指針,n是增加的聯(lián)系人的數(shù)目 (4)函數(shù)算法流程:如圖3-1所示 3-1算法流程圖1 3.2.2 文件數(shù)據(jù)讀出 (1)函數(shù)原型: int Add(LinkList &L,contacts c)(2)函數(shù)功能: 單個增加聯(lián)系人 (3)函數(shù)形參: Add(&L, c),其中L是鏈表指針,c是具體的聯(lián)系人(4)函數(shù)算法流程:如圖3-2所示 3-2算法流程圖2 3.2.3 文件數(shù)據(jù)讀出 (1)函數(shù)原型:void Dail(LinkList L,string name)(2)函數(shù)功能: 撥打姓名為name的聯(lián)系人的電話,在撥打時依次顯示此人電話號碼中的各個數(shù)字,并伴隨相應的拔號聲音 (3)函數(shù)形參: Dail(L, name),其中L為鏈表指針,name為撥號的聯(lián)系人的姓名 (4)函數(shù)算法流程:如圖3-3所示 3-3 算法流程圖3 3.2.4 文件數(shù)據(jù)讀出 (1)函數(shù)原型: void ChangeInfo(LinkList &L,string name)(2)函數(shù)功能: 修改姓名為name的聯(lián)系人的信息 (3)函數(shù)形參: ChangeInfo(&L,name),其中L為鏈表指針,name為將要修改信息的聯(lián)系人的姓名 (4)函數(shù)算法流程:如圖3-4所示 3-4 算法流程圖4 3.2.5 文件數(shù)據(jù)讀出 (1)函數(shù)原型: void Delete(LinkList &L,string name)(2)函數(shù)功能: 從鏈表中刪除姓名為name的聯(lián)系人 (3)函數(shù)形參: Delete(&L,name),其中L為鏈表指針,name為將要刪除的聯(lián)系人的姓名 (4)函數(shù)算3-5所示 法流程:如圖 3-5 算法流程圖5 3.2.6 文件數(shù)據(jù)讀出 (1)函數(shù)原型: void Read(LinkList L)(2)函數(shù)功能: 將文件中的聯(lián)系人信息導入通信管理系統(tǒng)中(3)函數(shù)形參:Read(L),其中L為鏈表指針(4)函數(shù)算法流程:如圖3-6所示 3-6 算法流程圖6 3.2.7 文件數(shù)據(jù)讀出 (1)函數(shù)原型: void Write(LinkList L)(2)函數(shù)功能: 將通信管理系統(tǒng)中所有聯(lián)系人的各項信息有序的導出,保存在文件里 (3)函數(shù)形參: Write(L),其中L為鏈表指針(4)函數(shù)算法流程:如圖3-7所示 3-7 算法流程圖7 4.運行結(jié)果 (1)打開系統(tǒng),顯示主菜單界面,如圖4-1所示: 圖4-1 主菜單界面 (2)輸入數(shù)字1,進行新增聯(lián)系人的操作。接著輸入1選擇批量增加,輸入數(shù)字2選擇單個增加。批量增加如圖4-2所示,單個增加如圖4-3所示: 圖4-2 批量增加聯(lián)系人 圖4-3 單個增加聯(lián)系人 (3)輸入數(shù)字2,進行查看通信錄的操作,然后選擇聯(lián)系人的類別,查看此類中的所有聯(lián)系人姓名及電話號碼,如圖4-4所示: 圖4-4 按類別查看聯(lián)系人 (4)輸入數(shù)字3,進行撥號操作,如圖4-5所示: 圖4-5 撥號 (5)輸入數(shù)字4,進行修改信息操作,然后輸入將要修改信息的聯(lián)系人姓名,再選擇學要修改的信息項,如圖4-6所示: 圖4-6 修改聯(lián)系人信息 (6)輸入數(shù)字5,然后輸入將要刪除的聯(lián)系人姓名,進行刪除聯(lián)系人的操作,如圖4-7所示: 圖4-7 刪除聯(lián)系人 (7)輸入數(shù)字6,進行導入通信錄操作,將文件“通訊錄.txt”中的聯(lián)系人信息導入通訊管理系統(tǒng),如圖4-8所示: 圖4-8 導入通信錄 (8)輸入數(shù)字7,進行導出通信錄操作,如圖4-9所示;導出的通信錄如圖4-10所示: 圖4-9 導出通信錄 圖4-10 已導出通信錄列表 (9)輸入數(shù)字0,退出通信管理系統(tǒng),如圖4-11所示: 圖4-11 退出通信管理系統(tǒng) 5.課程設計總結(jié) 5.1 編程中的問題及解決方法 在本次程序設計過程中,遇到的主要問題是模擬打字機效果輸出聯(lián)系人電話號碼以及從導入通信錄。 前者是由于對字符串的理解不到位,后來查閱了相關(guān)資料后意識到可以將字符串看作字符數(shù)組,從而獲取單個的字符,然后在每個字符的輸出后利用系統(tǒng)的休眠函數(shù)Sleep設置停頓,從而達到想要的效果。 后者是因為在導出通信錄的時候多輸出了一個回車換行符,導致在進行文件讀入時多讀入一個回車換行符,以至于總是多一個聯(lián)系人。然后便在導出文件時,不再在末尾輸出回車換行符,從而解決了該問題。5.2 小結(jié) 總的來說這次課程設計完成總體較好。首先在已經(jīng)學習了的數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)上,我很快的想出了具體的設計思路,接著利用課余時間寫出了大體的框架。再寫出大題框架后隨即進行了細節(jié)的完善,最后大概用了兩天時間進行各項功能的調(diào)試。在代碼的編寫過程中并未產(chǎn)生太大瓶頸,遇到問題在查閱相關(guān)資料以及仔細調(diào)試后也得到了很好地解決,這是一次能好的體驗,也是對自己能力的一次考驗。5.3 心得體會 經(jīng)過這次課程設計,我對數(shù)據(jù)結(jié)構(gòu)這門課程有了更深刻的了解,不再僅僅是書本上抽象的代碼,還對如和將數(shù)據(jù)結(jié)構(gòu)應用到具體的實例中有了更好的認識。編程不僅需要對理論知識的理解,更重要的是它實際的應用,只有具體地進行過程序的設計,才能有更深刻的記憶和領(lǐng)會。同時通過查閱資料和讀別人的代碼,我也學會到一些新的內(nèi)容和一些巧妙的思想。5.4 程序設計方法 本程序設計主要采用的方法是利用結(jié)構(gòu)體進行編程,而采用的數(shù)據(jù)結(jié)構(gòu)是線性表中的鏈表結(jié)構(gòu)。參考文獻 [1] 嚴蔚敏,吳偉民.數(shù)據(jù)結(jié)構(gòu)(c語言版)[M].2.北京:清華大學出版社,2016 [2] 陳維新,林小茶.c++面向?qū)ο笳n程設計教程[M].清華大學出版社 目錄 一、設計目的.............................................1 二、需求分析.............................................2 2.1系統(tǒng)需求簡介.......................................2 2.1.1系統(tǒng)目標......................................2 2.1.2功能需求分析..................................2 2.1.3性能需求分析..................................2 2.2系統(tǒng)業(yè)務功能分析...................................2 2.2.1具體分析有兩個角色:老師和學生................3 2.2.2流程圖.......................................3 三、模塊分析及設計.......................................3 四、數(shù)據(jù)庫設計...........................................4 4.1數(shù)據(jù)字典..........................................4 4.1.1數(shù)據(jù)流.......................................4 4.1.2 數(shù)據(jù)存儲.....................................4 4.2 E-R圖...........................................5 4.3系統(tǒng)數(shù)據(jù)庫的設計...................................6 五、設計過程及要點.......................................9 5.1數(shù)據(jù)庫及窗體設計...................................9 5.2 主要代碼........................................11 六、設計總結(jié)............................................12 七、參考資料............................................12 一、設計目的 為了提高高校學生成績信息的管理效率,方便學生和教師對學生成績信息進行查詢、方便學校里面管理員去管理和查詢學生信息,建立一個學生成績管理系統(tǒng),使學生信息管理工作規(guī)范化,系統(tǒng)化,程序化,避免學生成績管理的隨意性,提高信息處理的速度和準確性,能夠及時、準確、有效的查詢和修改學生信息是必須而且十分迫切的工作。本次課程設計題目為《學生成績管理系統(tǒng)》,涉及成績管理系統(tǒng)的登錄界面、老師對學生成績的查詢、學生對學生成績的查詢、以及老師對學生成績的增刪改查分析統(tǒng)計等內(nèi)容。本功能實現(xiàn)對學生信息、教師信息情況信息的管理和統(tǒng)計、課程信息和成績信息查看及維護。 本課程設計的目的是使學生能熟練掌握簡單的簡單Windows窗體應用程序的設計和數(shù)據(jù)庫的應用,希望通過本次課程設計鍛煉學生使用C#語言解決實際問題的能力。本系統(tǒng)后臺數(shù)據(jù)庫采用Microsoft SQL Server 數(shù)據(jù)庫,該數(shù)據(jù)庫系統(tǒng)在安全性、準確性和運行速度方面有絕對的優(yōu)勢,并且處理數(shù)據(jù)量大,效率高;前臺采用Microsoft 公司的Visual Studio 2008作為主要開發(fā)工具,可與SQL Server 2005數(shù)據(jù)庫無縫鏈接。本報告詳細的介紹了學生信息管理系統(tǒng)的開發(fā)過程,主要涉及到的工作如下:設計目的、需求分析、模塊分析及設計、數(shù)據(jù)庫設計、制作過程及要點、設計總結(jié)。 二、需求分析 2.1系統(tǒng)需求簡介 2.1.1系統(tǒng)目標 根據(jù)查詢條件實現(xiàn)學生信息的查詢 學生選課信息查詢、成績信息的查詢 (3)學生信息、課程信息、成績信息的增加、刪除、修改(4)對基本信息完成增加、刪除、修改時,需注意表與表之間的關(guān)聯(lián) 2.1.2功能需求分析 本系統(tǒng)的功能需求分析如下: 學生信息查詢:學生可以根據(jù)學號、姓名、專業(yè)進行查詢.學生信息管理:主要是用于學生信息更新、插入、刪除; 學生成績錄入:用于學生成績管理,錄入學生成績,也可以更新。 2.1.3性能需求分析 (1)登錄、用戶界面需求:簡潔、易懂、易用、友好的用戶界面。(2)安全保密性需求:只有憑借用戶名和密碼登陸系統(tǒng),才能進行信息的管 理等。 2.2系統(tǒng)業(yè)務功能分析 2.2.1具體分析有兩個角色:老師和學生 學生只能有查詢的權(quán)利,其中包括按學號查詢,按姓名查詢和按課程號查詢; 而老師則有查詢以及對學生成績增刪改查分析統(tǒng)計功能,而分析主要是分析每一課程的及格人數(shù),不及格人數(shù)和及格率等,統(tǒng)計則是統(tǒng)計各個班級和課程成績的升序排序等。 2.2.2流程圖 圖一 總流程圖 三、模塊分析及設計 《學生成績管理系統(tǒng)》包括 5個模塊:登錄及主界面,成績添加,成績查詢,成績增刪改,成績分析與統(tǒng)計。登陸及主界面:用戶人員在登錄界面中輸入用戶名與密碼。通過用戶名與數(shù)據(jù)庫里的用戶表相比配,將學生與教師區(qū)分開,二者各自進入自己的頁面。二者擁有各自權(quán)限,分別擁有不同的功能。 成績添加:主要實現(xiàn)學生成績的添加功能,將學生的各種信息添加到數(shù)據(jù)庫中。 成績查詢:主要三種方式,按學號,按姓名,按課程號查詢學生的成績。 成績增刪改:主要是老師對學生的各項信息或成績的修改,刪除,添加等,以實現(xiàn)學生成績管理系統(tǒng)的及時更新。 成績分析統(tǒng)計:對學生成績的分析統(tǒng)計包括各個學生或課程的及格人數(shù),不及格人數(shù),及格率,學生成績的排序等等。 四、數(shù)據(jù)庫設計 4.1數(shù)據(jù)字典 4.1.1數(shù)據(jù)流 課程信息:課程號,課程名稱,學期,課程時間,學分等信息 學生信息:學號,姓名,專業(yè),性別,生日,年齡,現(xiàn)狀等信息 教師信息:教師編號,姓名等信息 4.1.2 數(shù)據(jù)存儲 成績表:包括學生姓名,學號,課程號,成績等信息 登錄信息表:包括學生學號,密碼及教師編號,密碼等信息 4.2 E-R圖 圖二 學生信息E-R圖 圖三 課程信息E-R圖 圖四 教師信息E-R圖 圖五 總E-R圖 4.3系統(tǒng)數(shù)據(jù)庫的設計 綜合以上分析,要實現(xiàn)系統(tǒng)功能,應該建立如下表: 表一 課程表 表二 學生表 表三 成績表 表四 教師表 表五 用戶表 五、設計過程及要點 這次課程設計我主要做數(shù)據(jù)庫和登陸界面的設計并實現(xiàn)該系統(tǒng)的登錄功能。 5.1數(shù)據(jù)庫及窗體設計 其中數(shù)據(jù)庫我一共設計了五個表,分別是學生表,課程表,成績表,教師表和用戶表,這些表的詳細信息已經(jīng)在上面有了介紹。 然后就是登錄功能的實現(xiàn)。 圖六 登錄窗體 登錄窗體主要用了3個label控件,2個textbox控件,2個radioButton控件,2個button控件,實現(xiàn)了教師跟學生的登錄,用戶名跟密碼輸入正確后,選擇老師或者學生后分別進入各自的主界面,在主界面中可以對學生的成績進行查詢,刪除等等操作。老師和學生的主界面分別如下圖: 圖七 學生主界面 圖八 教師主界面 5.2 主要代碼 namespace WindowsFormsApplication1 { public partial class 登錄 : Form { public 登錄(){ InitializeComponent();sqlhelper = new Sqlhelper(“server=.;database=xscj;integrated security=true”);} Sqlhelper sqlhelper private void button1_Click(object sender, EventArgs e){ string sn;string str = “server=.;database=xscj;integrated security=true”;SqlConnection conn = new SqlConnection(str);conn.Open(); if(radioButton1.Checked){ textBox1.Text.Trim()+ “'and password='” +textBox2.Text.Trim()+ “'”;SqlCommand comm = new SqlCommand(cstr, conn);SqlDataReader dr = comm.ExecuteReader();if(dr.Read()){ sn = textBox1.Text.Trim();教師界面 f1 = new 教師界面();f1.Show();this.Visible = false;} else { MessageBox.Show(“輸入有誤,請重新輸入!”);textBox1.Text = “";textBox2.Text = ”“;} } if(radioButton2.Checked){ string cstr = ”select * from [user] where type='教師'and uid='“ + 11 string cstr = ”select * from [user] where type='學生'and uid='“ +textBox1.Text.Trim()+ ”'and password='“ + textBox2.Text.Trim()+ ”'“;SqlCommand comm = new SqlCommand(cstr, conn);SqlDataReader dr = comm.ExecuteReader();if(dr.Read()){ sn = textBox1.Text.Trim();學生界面 f2 = new 學生界面();f2.Show();this.Visible = false;} else { MessageBox.Show(”輸入有誤,請重新輸入!“);textBox1.Text = ”“;textBox2.Text = ”";} } conn.Close();conn.Dispose();} } } 六、設計總結(jié) 為期一周的課程設計結(jié)束了,在老師和同學的幫助下,我基本完成系統(tǒng)的設計。我們小組按照系統(tǒng)工程軟件設計的要求,從設計目的、需求分析、模塊分析及設計、數(shù)據(jù)庫設計等各個步驟,分步完成系統(tǒng)的各項任務,實現(xiàn)了系統(tǒng)中的學生信息查詢,學生信息增刪改,學生信息添加等模塊的功能。 在這短短的五天里收獲如下: 鞏固和加深了對C#的理解,提高綜合運用本課程所學知識的能力。 2、培養(yǎng)了我選用參考書,查閱手冊及文獻資料的能力。培養(yǎng)獨立思考,深入研究,分析問題、解決問題的能力。 3、通過實際編譯系統(tǒng)的分析設計、編程調(diào)試,掌握應用軟件的分析方法和工程設計方法。 4、更加深刻的了解了小組團隊協(xié)作的重要性,只有整個小組的人通力合作才可能會完成一個項目并且進步。 根據(jù)我在課程設計中遇到的問題,我將在以后的學習當中注意以下幾點: 認真上好專業(yè)實驗課,多在實踐中鍛煉自己。 2、寫程序的過程中要考慮周到,嚴密。 3、在做設計的時候要有信心,有耐心,切勿浮躁。 4、認真的學習課本知識,掌握課本中的知識點,并在此基礎(chǔ)上學會靈活運用。 5、在課余時間里多寫程序,熟練掌握在調(diào)試程序的過程中所遇到的常見錯誤,以便能節(jié)省調(diào)試程序的時間。 七、參考資料 [1] 錢能.C++程序設計,2008,16(2):233-237 [2] 錢能.C++程序設計試驗指導,2008.34(3):35-38 [3] 譚浩強.C程序設計.北京:清華大學出版社,2001 13 課 程 設 計 任 務 書 題 目 C語言課程設計 系 (部) 專 業(yè) 班 級 學生姓名 學 號 06 月 信息科學與電氣工程學院 計算機科學與技術(shù) 計職141 王雪 140819139 日至 07 月 04 日 共 周 指導教師 院 長 2015 年 6月 23日 一、課程設計目的 將理論教學中涉及到的知識點貫穿起來,對不同的數(shù)據(jù)類型、程序控制結(jié)構(gòu)、數(shù)據(jù)結(jié)構(gòu)作一比較和總結(jié),結(jié)合設計題目進行綜合性應用,對所學知識達到融會貫通的程度。通過課程設計,學生在下述各方面的能力應該得到鍛煉: (1)進一步鞏固、加深學生所學專業(yè)課程《C++程序設計語言》的基本理論知識,理論聯(lián)系實際,進一步培養(yǎng)學生綜合分析問題,解決問題的能力。 (2)全面考核學生所掌握的基本理論知識及其實際業(yè)務能力,從而達到提高學生素質(zhì)的最終目的。 (3)利用所學知識,開發(fā)小型應用系統(tǒng),掌握運用C++語言編寫調(diào)試應用系統(tǒng)程序,訓練獨立開發(fā)應用系統(tǒng),進行數(shù)據(jù)處理的綜合能力。 (4)對于給定的設計題目,如何進行分析,理清思路,并給出相應的數(shù)學模型。 (5)掌握結(jié)構(gòu)化程序設計方法,熟悉面向?qū)ο蟪绦蛟O計方法。(6)熟練掌握C++語言的基本語法,靈活運用各種數(shù)據(jù)類型。(7)進一步掌握在集成環(huán)境下如何調(diào)試程序和修改程序。設計功能 錄入聯(lián)系人信息(包括姓名、電話號碼、地址等信息);通訊錄管理系統(tǒng)要求實現(xiàn)以下功能: 1、輸入每一位聯(lián)系人記錄,將其信息存入文件中。 2、查詢所有聯(lián)系人的信息,并按可選的自定義規(guī)則進行排序; 3、記錄修改,將修改的記錄信息保存于文件中。設計要求 1、設一個通信錄由以下幾項數(shù)據(jù)信息構(gòu)成: 數(shù)據(jù)項 類型 姓名 字符串 地址 字符串 郵政編碼 字符串 電話號碼 字符串 試為通信錄數(shù)據(jù)定義類型和定義通信錄變量,實現(xiàn)功能:存取、顯示、刪除記錄、查詢記錄等功能。 2、要求:界面友好,易于操作 總體設計 系統(tǒng)功能模塊圖: 添加:可以添加通訊錄記錄,依次輸入編號、姓名、年齡、電話號碼、通訊地址、電子郵箱等后,會提示是否繼續(xù)添加。 顯示:可以以表格形式輸出所有通訊錄里的記錄 刪除:輸入欲刪除的那個人的名字后,會自動刪除他(她)的記錄內(nèi)容 查詢:可以選擇用姓名、電話、地址三種方式查詢 修改:輸入欲修改的那個人的名字后,再依次輸入編號、姓名、年齡、電話號碼、通訊地址、電子郵箱即可完成修改 保存:,輸入文件名(帶后綴名)后,即可將通訊錄信息保存到文件 課程設計名稱及內(nèi)容 課程設計名稱:單項選擇題標準化考試系統(tǒng) 設計內(nèi)容:設計并實現(xiàn)一個單項選擇題標準化考試系統(tǒng)。該系統(tǒng)可以完成試題錄入、試題抽取、自動判卷等功能。 任務和要求 功能要求: (1)用文件保存試題庫。(每個試題包括題干、4個備選答案、標準答案)(2)試題錄入:可隨時增加試題到試題庫中 (3)試題抽?。好看螐脑囶}庫中可以隨機抽出N道題(N由鍵盤輸入)(4)答題:用戶可實現(xiàn)輸入自己的答案 (5)自動判卷:系統(tǒng)可根據(jù)用戶答案與標準答案的對比實現(xiàn)判卷并給出成績。 (二)其它要求: (1)只能使用C/C++語言,源程序要有適當?shù)淖⑨?,使程序容易閱讀(2)至少采用文本菜單界面(如果能采用圖形菜單界面更好)(3)學生可自動增加新功能模塊(視情況可另外加分) 主要知識點 l 面向?qū)ο蟪绦蛟O計方法 l 界面制作,switch的應用。l 類和對象。l 動態(tài)數(shù)組(鏈表)類模板。l 文件的讀寫。 五、其他 程序設計可在Microsoft VC++6.0、Borland C++ Builder環(huán)境下進行。 六、參考資料 【1】《C語言程序設計》,譚浩強編,清華大學出版社,2008年 出版 【2】《C語言程序設計》,吳明發(fā)編,北京理工大學出版社,2007年出版 【3】《C語言參考手冊》邱仲潘 機械工業(yè)出版社,2004年出版 【4】《C語言課程設計案例精編》 姜靈之 清華大學出版社 2008年出版 詳細設計(1).通訊錄: 主要代碼 #include //結(jié)構(gòu)體 { };class inter { private: student st[35];char no[13];char name[20];char address[100];char tel_no[12];char post_code[7];char e_mail[40];public: void add(char no[13],char name[20],char address[100],char tel_no[12],char post_code[7],char e_mail[40]); void del(char name[20]);void find1(char no[13]);void find2(char name[20]);void list1();void list2();int correct(char name[20]);void read();void write();void format();int back(){ cout<<“ 返回還是回到主菜單(T為退出,R為回到主菜單,不計大小寫): ”; } void print(int i){ cout<<“學號:”< }; } cout<<“電話號碼:”< inter a;a.format();char select1;cout< 計職141 ” < <<“tt★★★★★★★★★★★★★★★★★★★★★★★★★★” < ※” < 通 迅 錄 ※” < ※” < ※” < ※” < ※” < <<“tt ”< <<“ttt選擇 :”;cin>>select1; switch(select1){ case '1':cout<<“ (1)添加:”< cout<<“ (2)刪除:”< (3)修改:”< 請選擇:”< 輸入添加的資料:”< char name[20]; char address[100]; char tel_no[12]; char post_code[7]; char e_mail[40]; cout<<“ 輸入學號:”< 輸入姓名:”< 輸入地址:”< 輸入電話號碼:”< 輸入郵編:”< cout<<“ 輸入E_mail:”< cout<<“ 返回還是回到主菜單(T為退出,R為回到主菜單,不計大小寫): ”; char back_add;cin>>back_add;if(back_add=='R'||back_add=='r')goto top;else goto bottom;break;case '2':cout<<“ 輸入要刪除人的姓名:”< char name2[20];cin>>name2;a.del(name2); cout<<“ 返回還是回到主菜單(T為退出,R為回到主菜單,不計大小寫): ”; char back_del;cin>>back_del;if(back_del=='R'||back_del=='r')goto top;else goto bottom;break;case '3':cout<<“ 輸入需要修改人的姓名:”< char name3[20];cin>>name3;if(a.correct(name3)) } goto top;else goto bottom;break;break;case '2':cout<<“ (1)根據(jù)姓名查找”< cout<<“ (2)根據(jù)學號查找”< 請選擇: ”;cin>>select3;switch(select3){ case '1':char name4[20]; cout<<“ 輸入姓名: ”;cin>>name4;a.find2(name4); cout<<“ 返回還是回到主菜單(T為退出,R為回到主菜單,不計大小寫): ”; char back_f1;cin>>back_f1;if(back_f1=='R'||back_f1=='r')goto top;else goto bottom;break;case '2':char no4[13];cout<<“ 輸入學號: ”;cin>>no4; a.find1(no4); cout<<“ 返回還是回到主菜單(T為退出,R為回到主菜單,不計大小寫): ”; } break;char back_f2;cin>>back_f2;if(back_f2=='R'||back_f2=='r')goto top;else goto bottom;break;case '3':a.write();cout<<“ 返回還是回到主菜單(T為退出,R為回到主菜單,不計大小寫): ”; char back_w;cin>>back_w;if(back_w=='R'||back_w=='r')goto top;else goto bottom;break;case '4':cout<<“ (1)按學號排序:”< cout<<“ (2)按姓名排序:”< 請選擇:”;char select4;cin>>select4;switch(select4){ case '1':a.list1(); cout<<“ 返回還是回到主菜單(T為退出,R為回到主菜單,不計大小寫): ”; char back;cin>>back;if(back=='R'||back=='r')goto top;else goto bottom;break;case '2':a.list2(); cout<<“ 返回還是回到主菜單(T為退出,R為回到主菜單,不計大小寫): ”; } break;char back1;cin>>back1;if(back1=='R'||back1=='r')goto top;else goto bottom;break;case '5':a.read();cout<<“ 返回還是回到主菜單(T為退出,R為回到主菜單,不計大小寫): ”; char back_r;cin>>back_r;if(back_r=='R'||back_r=='r') goto top;else goto bottom;break;case '6':cout<<“ 請確認刪除所有資料!(Y/N) ”; char select5;cin>>select5;if(select5=='Y'||select5=='y')a.format();cout<<“ 返回還是回到主菜單(T為退出,R為回到主菜單,不計大小寫): ”; } char back_f;cin>>back_f;if(back_f=='R'||back_f=='r')goto top;else goto bottom;break;bottom:cout<<“ ★★★★★★★★★★★★歡迎使用本軟件!★★★★★★★★★★★ ”< void inter::add(char no[13],char name[20],char address[100],char tel_no[12],char post_code[7],char e_mail[40]){ int x=1;for(int i=0;i<35;i++)return 0; } { } if(!strcmp(st[i].no,“0”)){ } if(x==0)break;strcpy(st[i].address,address);strcpy(st[i].e_mail,e_mail);strcpy(st[i].name,name);strcpy(st[i].no,no);strcpy(st[i].post_code,post_code);strcpy(st[i].tel_no,tel_no);x=0;//刪除聯(lián)系人 void inter::del(char name[20]){ int x=1;for(int i=0;i<35;i++){ if(!strcmp(st[i].name,name)){ strcpy(st[i].address,“0”); strcpy(st[i].e_mail,“0”);strcpy(st[i].name,“0”);strcpy(st[i].no,“0”);strcpy(st[i].post_code,“0”);strcpy(st[i].tel_no,“0”); } } } else x=0;if(x==0)cout<<“ error:輸入姓名錯誤!”< int inter::correct(char name[30]){ int x;for(int i=0;i<35;i++){ } char select;cout<<“ (1)修改姓名:”< (2)修改學號:”< (3)修改地址:”< (4)修改郵編:”< (5)修改電話號碼:”< (6)修改E_MAIL:”< 請選擇:”;cin>>select;switch(select){ case '1':cout<<“ 輸入要修改的姓名:”;char name1[30];if(!strcmp(st[i].name,name))x=i; cin>>name1;strcpy(st[x].name,name1);cout<<“ 修改成功!”< 輸入要修改的學號:”; char no1[13];cin>>no1;strcpy(st[i].no,no1);cout<<“ 修改成功!”< 輸入要修改的地址:”; char address1[100];cin>>address1;strcpy(st[x].address,address1);cout<<“ 修改成功!”< 輸入要修改的郵編:”; char post_code1[7];cin>>post_code1;strcpy(st[x].post_code,post_code1);cout<<“ 修改成功!”< 輸入要修改的電話號碼:”;char tel_no1[12]; cin>>tel_no1;strcpy(st[x].tel_no,tel_no1);cout<<“ 修改成功!”< 輸入要修改的E_MAIL:”; char e_mail1[40]; cin>>e_mail1; strcpy(st[x].e_mail,e_mail1); cout<<“ 修改成功!”< return back(); break;} } //按學號查詢聯(lián)系人 void inter::find1(char no[13]){ int x,y=1,z=1;for(int i=0;i<35;i++){ if(!strcmp(st[i].no,no)) { x=i; z=0; } else y=0; if(z==0)break; } if(y==0)cout<<“ 輸入的學號查找不到??!”< print(x);} //按姓名查詢聯(lián)系人 void inter::find2(char name[20]){ } //讀取文件 void inter::read(){ int x,y=1,z=1;for(int i=0;i<35;i++){ } if(y==0)cout<<“ 輸入的姓名查找不到!!”< } else y=0;if(z==0)break;x=i;z=0; print(x); char name1[20];cout<<“ 輸入你要導入的文件名: ”;cin>>name1;strcat(name1,“.txt”);ifstream file(name1);char line[120];char no[120];char name[120];char address[120];char post_code[120];char tel_no[120];char e_mail[120];int time=0;file.getline(line,120);while(!file.eof()){ for(int k=0;k<35;k++){ if(time==0){ strcpy(no,line);time=1;for(int i=0;i<120;i++){ if(no[i]==':'){ i++;for(int j=0;j<13;j++) } } { } st[k].no[j]=no[i];i++;file.getline(line,120,'n');} if(time==1){ } if(time== 2){ strcpy(name,line);time=2; for(int i=0;i<120;i++){ } file.getline(line,120,'n');if(name[i]==':'){ } i++;for(int j=0;j<20;j++){ } st[k].name[j]=name[i];i++; } strcpy(address,line);time=3;for(int i=0;i<120;i++){ } file.getline(line,120,'n');if(address[i]==':'){ } i++;for(int j=0;j<100;j++){ } st[k].address[j]=address[i];i++;if(time==3){ strcpy(tel_no,line);time=4;for(int i=0;i<120;i++){ if(tel_no[i]==':'){ i++;for(int j=0;j<12;j++){ st[k].tel_no[j]=tel_no[i]; } } } } i++;file.getline(line,120,'n'); if(time==4){ } if(time==5){ strcpy(e_mail,line);strcpy(post_code,line);time=5;for(int i=0;i<120;i++){ } file.getline(line,120,'n');if(post_code[i]==':'){ } i++;for(int j=0;j<7;j++){ } st[k].post_code[j]=post_code[i];i++; } } } } time=0;for(int i=0;i<120;i++){ } file.getline(line,120,'n');if(e_mail[i]==':'){ } i++;for(int j=0;j<40;j++){ } st[k].e_mail[j]=e_mail[i];i++; file.close();//寫入文件 void inter::write(){ char name[20];cout<<“ 輸入要保存的文件名 ”;cin>>name;strcat(name,“.txt”);ofstream savefile(name);for(int i=0;i<35;i++) } { } savefile.close();savefile << “學號:”< savefile << “姓名:”< savefile << “地址:”< savefile << “電話號碼:”< savefile << “郵編:”< savefile << “E_MAIL:”< strcpy(no,st[j].no);strcpy(st[j].no,st[j+1].no);for(int i=0;i<34;i++){ for(int j=0;j<35-i;j++){ if(strcmp(st[j].no,st[j+1].no)>0){ char no[13]; char name[20]; char address[100]; char tel_no[12]; char post_code[7]; char e_mail[40]; strcpy(st[j+1].no,no); strcpy(name,st[j].name);strcpy(st[j].name,st[j+1].name);strcpy(st[j+1].name,name); strcpy(address,st[j].address); } for(int k=0;k<35;k++){ int x=0;if(strcmp(st[k].no,“0”)) } } strcpy(st[j].address,st[j+1].address);strcpy(st[j+1].address,address); strcpy(tel_no,st[j].tel_no);strcpy(st[j].tel_no,st[j+1].tel_no);strcpy(st[j+1].tel_no,tel_no); strcpy(post_code,st[j].post_code);strcpy(st[j].post_code,st[j+1].post_code);strcpy(st[j+1].post_code,post_code); strcpy(e_mail,st[j].e_mail);strcpy(st[j].e_mail,st[j+1].e_mail);strcpy(st[j+1].e_mail,e_mail); { } if(x==1){ cout< } } } //按姓名排序 void inter::list2(){ for(int i=0;i<34;i++){ for(int j=0;j<35-i;j++){ if(strcmp(st[j].name,st[j+1].name)>0){ char no[13]; char name[20]; char address[100]; char tel_no[12]; char post_code[7]; char e_mail[40]; strcpy(no,st[j].no);strcpy(st[j].no,st[j+1].no);strcpy(st[j+1].no,no); strcpy(name,st[j].name);strcpy(st[j].name,st[j+1].name);strcpy(st[j+1].name,name); strcpy(address,st[j].address); } for(int k=0;k<35;k++){ } } strcpy(st[j].address,st[j+1].address);strcpy(st[j+1].address,address); strcpy(tel_no,st[j].tel_no);strcpy(st[j].tel_no,st[j+1].tel_no);strcpy(st[j+1].tel_no,tel_no); strcpy(post_code,st[j].post_code);strcpy(st[j].post_code,st[j+1].post_code);strcpy(st[j+1].post_code,post_code); strcpy(e_mail,st[j].e_mail);strcpy(st[j].e_mail,st[j+1].e_mail);strcpy(st[j+1].e_mail,e_mail); } } int x=0;if(strcmp(st[k].no,“0”)){ } if(x==1){ } cout< void inter::format(){ } for(int i=0;i<35;i++){ } strcpy(st[i].address,“0”);strcpy(st[i].e_mail,“0”);strcpy(st[i].name,“0”);strcpy(st[i].no,“0”);strcpy(st[i].post_code,“0”);strcpy(st[i].tel_no,“0”); (2).工作流程圖: 1.通訊錄主界面 2.添加:添加通訊錄記錄 3.顯示:查詢通訊錄記錄 4.刪除:刪除通訊錄記錄 5.修改:修改通訊錄記錄 小結(jié)(收獲和建議)這次的程序?qū)嵲O計實驗是對我們進入大學以來學習程序設計語言結(jié)果的一次大檢驗,面對許多不懂得知識,通過他人的幫助,以及參考他人的成果,自己動手嘗試,修改等,才完成。這個課程設計,花費了我近兩個星期的時間,這也是因為書本不熟悉。通過這次設計,使我對《C語言》這門課程有了更深一步的了解。它不僅是計算機程序設計的重要理論技術(shù)基礎(chǔ),也在我們電子與信息專業(yè)的學習中占據(jù)著十分重要的地位。同時也使我們知道,要學好這門課程,僅學習書本上的知識是不夠的,還要有較強的實踐能力。因為我們學習知識就是為了實踐。而只有多實踐,多編寫程序,才能更好的理解與掌握書本上的東西。利用計算機來編寫程序,也讓我感受到了編程的樂趣,極大的激發(fā)了我的興趣。第三篇:通訊錄管理系統(tǒng)-數(shù)據(jù)結(jié)構(gòu)課程設計報告
第四篇:C#學生成績管理系統(tǒng)課程設計剖析
第五篇:通訊錄管理系統(tǒng)