C 用陣列存放資料

2021-07-06 03:35:56 字數 4196 閱讀 8746

我們剛學習c++的時候,老師會叫我們去做一些小系統出來,比如說學生成績管理系統,圖書管理系統,通訊錄之類的。現在我就用做乙個簡單的通訊錄來舉例吧

來來來,先上**

/*

* 程式功能:實現學生通訊錄的增、刪、改、查。

*/#include#includeusing namespace std;

#define stulen 100 //陣列長度

//學生資訊

struct student_info

;//學生類

class student;

student::student()

student::~student()

int student::get_current_stunum()

void student::menu()

} else }

void student::search_student_info()

}cout << "***********************************===" << endl;

if (judgement==0) }

void student::delete_student_info()

else

}if (select == 'y' || select == 'y')

else

}if (select == 'y' || select == 'y')

}} if (judgement == 0) }

void student::insert_student_info()

else

} if (s == 'n' || s == 'n')

cout << "需要插入學生資訊的位置為?" << endl;

while (1)

else

} cout << "***********************************===" << endl;

cout << "第" << i << "個學生資訊:" << endl;

cout << "學號:";

cin >> s1.stu_num;

cout << "姓名:";

cin >> s1.stu_name;

cout << "家長姓名:";

cin >> s1.stu_parent_name;

cout << "年齡:";

cin >> s1.stu_age;

cout << "性別: ";

cin >> s1.stu_***;

cin >> s1.stu_address;

cout << "學生**號碼:";

cin >> s1.stu_phonenum;

cout << "家長**號碼:";

cin >> s1.stu_parent_phonenum;

cout << "***********************************===" << endl;

//判斷插入位置是否合法

if (i<0||i>current_stunum+1 )

//判斷順序表是否已滿

if (current_stunum == stulen)

//移動其他學生資訊,將要插入的位置的學生資訊空出來

int j;

for (j = current_stunum; j>i-1; j--)

for (int k = 0; k<20; k++)

} //插入合適位置

stu_array[j].stu_num = s1.stu_num;

stu_array[j].stu_name = s1.stu_name;

stu_array[j].stu_parent_name = s1.stu_parent_name;

stu_array[j].stu_age = s1.stu_age;

stu_array[j].stu_*** = s1.stu_***;

stu_array[j].stu_address = s1.stu_address;

for (int k = 0; k<20; k++)

for (int k = 0; k<20; k++)

//修改當前學生數

current_stunum++;

cout << "插入成功。。" << endl;

cout << "***********************************===" << endl; }}

void student::show_student_info()

cout << "***********************************===" << endl;

}void main()

}

**中的函式都沒有傳引數,這是乙個很不好的,雖然不傳引數也能實現功能。**非常簡單,一般都能看懂

先來講一下函式的呼叫吧,**的所有函式(除main函式外)都是student類的成員。在main函式裡建立乙個stu1物件,並用stu1去呼叫選單函式,進入選單函式後,根據使用者的功能選擇再去呼叫對應的功能函式,呼叫完後都返回到選單函式

現在來講講用線性表存放資料的一些操作

增操作:如果增加乙個人的資訊之前,陣列中還沒有資料,那麼我們插入第乙個人的資料就存放在陣列的前面,這裡不用解釋太多。當陣列裡面已經有n個人的資料後,我們再插入新的資料時,我們就可以插入到那n個人之間的任何乙個位置。例如:我想插入到第二個位置,那麼我就需要將第二個和第二個以後的每乙個人往後移動乙個位置,將第二個位置空出來,這樣我們就可以向第二個位置新增資料了。

移動位置的**(特別注意:移動位置時,一定要從最後面開始移動,否則第二個位置以後的資料都將會被第二個位置的資料覆蓋)

//移動其他學生資訊,將要插入的位置的學生資訊空出來

int j;

for (j = current_stunum; j>i-1; j--)

for (int k = 0; k<20; k++)

}

插入對應位置的**

//插入合適位置

stu_array[j].stu_num = s1.stu_num;

stu_array[j].stu_name = s1.stu_name;

stu_array[j].stu_parent_name = s1.stu_parent_name;

stu_array[j].stu_age = s1.stu_age;

stu_array[j].stu_*** = s1.stu_***;

stu_array[j].stu_address = s1.stu_address;

for (int k = 0; k<20; k++)

for (int k = 0; k<20; k++)

//修改當前學生數

current_stunum++;

刪操作:說到刪操作,這也是很好玩的。但是很多不會用陣列存放資料的人都可能會無從下手,或者認為要刪除陣列中的元素是直接delete掉,那要怎麼delete呢?

其實說白了,刪除陣列的元素就是覆蓋陣列的元素。比如說我要刪除第二個位置的資料,那麼我就可以將第三個位置的資料直接移動到第二個位置,第四個位置的移動到第三個位置,以此類推。有乙個要特別注意的,移動資料時一定要從前面開始移動,不能從後面開始移動,否則第二個位置後的資料都會被第n個位置的資料所覆蓋。移動完成後有些同學就會想到,第n個位置的資料已經移動到第n-1個位置去了,那麼第n個位置存放什麼呢?其實第n個位置移動前存的是什麼移動後存放的也是什麼。有些同學就會想,第n-1個位置與第n個位置存一樣的資料不就不對了嗎?其實我們刪除乙個位置的資料後我們要將位置總數減一,這樣你就不用去訪問第n個位置的資料啦。這樣的話,第n個位置的記憶體不就被無用的資料占用了嗎?其實我們不用管它,當我們再次插入資料到第n個位置時,自然就將那些無用的資料覆蓋了,所以並沒什麼影響。

改操作:改操作沒什麼好說的,直接查詢到需要修改的資料,然後將新的資料覆蓋老的資料就行。

查操作:查操作也沒什麼好說的,查詢到對應的資料直接數出來就行了。

這是用線性表來存放資料的一些操作,弄懂陣列後就會覺得很簡單,並沒有什麼難的。

plist存放陣列

plist使用的若干問題 弄了半天的plist,最無語的莫過於plist還分種類的。有字典型和陣列型等。plist的寫入是,你把你放在工程中的plist刪掉。你要寫入plist的時候,如果發現沒有該plist,其會幫新建該plist。別傻傻的認為自己建立乙個plist,然後 執行程式的時候他會在你建...

vector 中存放陣列

vector array 3 注意 和 之間的空格。array2可以儲存3個向量,向量的長度是可以改變的。array2 i 返回的是第i個向量。同理,array2 i j 返回的是第i個向量中的第j個元素。注意不能這樣賦值 array2 1 2 9 原因就是你沒有指定向量的大小。用push back...

C語言關於資料存放問題

在linux作業系統程式設計中,通常會分配4g的虛擬位址空間給使用者,其中又分為了使用者態和核心態,使用者態中有棧空間,堆空間,資料段和 段等等,棧空間主要存放了定義的區域性變數,形參和呼叫的函式等,而堆空一般用於函式malloc申請的記憶體,realloc作用是把申請的記憶體連線起來形成連續的記憶...