C++カリキュラム設計報告書
9708 ワード
カリキュラム設計報告書の前に書いたので、発表し忘れました...
C++でしばらく勉強した後、私たちはカリキュラム設計に入りました.私が選んだテーマは「新入生基本情報統計ソフト」です.学生の名前、性別、専門、生年月日、家庭の住所、英語の入学成績など、新入生が報告されます.チェーンテーブルクラスを設計して実現し、学生数を統計する必要があります.テキストインタフェース:新規学生情報 学生情報 を削除学生情報(保存済みファイル情報) をインポートする.学生情報検索(名前別) 学生情報統計(専門または性別または年齢---年齢は自動的に計算する) 英語成績別 学生情報保存 最初にいくつかの簡単な文法を学んだ後、一つの工事を完成するのはまだ難しいと感じました.カリキュラム設計の核心は、チェーンテーブルの操作であり、動的チェーンテーブルの増加、削除、変更、調査を実現することだと思います.また対象と向き合う思想を体現し,C言語の構造体に比べてクラスの概念を導入した. カリキュラムのデザインを書くときは、一気に打ち上げるよりも、モジュールを分けて、機能を分けてステップ的に書きます.クラスの作成には、学生情報を格納するためのstudentクラスと、さまざまな機能を実現するためのstudentmanageクラスの2つのクラスが作成されます.Studentmanageの関数は、実質的にstudentを指すクラスポインタです.例えば、Student*Studentmanage::creat()です.
これは制御可能な長さのチェーンテーブルで、ある終了条件が現れるまで、絶えず新しい申請空間に頼っています.例えば、私の学生の名前が#のとき、現在のサイクルを飛び出して、入力を停止します.最初のノードでは特殊な処理が必要であり,すなわちヘッダノードを初期化し,その後申請空間,初期化,ポインタをずらすループが往復した.ポイントは最後のノードの後継者が空(NULL)になることです.この機能は、形成されたチェーンテーブルに確立されているので、チェーンテーブルが空であれば飛び出します.空でない場合は、スペースを申請して初期化します.これは元のチェーンテーブルの最後に差し込むのではなく、頭のノードの後ろを探して、新しく追加したものを両者の間に置いたのです. 削除は増加と同様に、削除要求はもともとチェーンテーブルが存在する.名前に従って削除し、削除する名前を比較します.2つのケースがあります.1つは、ヘッドポインタを直接下に移動させ、元のノードfreeを落とすことです.もう1つの場合:他のノードは、p 1ポインタを先に後ろに移動させ、削除する必要がない場合は、毎回後ろに移動します.削除するノードが現れるまで、ポインタの前のnextを次のnextに掛けて、それを隔ててfreeを落とします. 改、この2つの原理の差が少ないことを調べて、一緒に話します.すべて遍歴を通じて、必要なノードを見つけて、ただ1つ見つけてから再入力して、元のデータを上書きします;もう一つは表示だけです.便利さとコードの簡潔さのために、ここでdisplaynode()関数を書きました.表示と改善のたびに便利になります. ファイルを保存し、 ファイルを読みます.
これは難点と言えますが、まずファイルを書き込むということです.すなわち、現在のブラックボックス---->txtファイルではofstream、ファイル出力ストリームクラス、openのtxtが使われています.なければ新しいものを作成し、もともとあれば上書きします.p 1に頭を付与した後、p 1が値を格納する限り、outが新しく作成したファイルに書き込み、p 1を次のファイルに移動させる.ファイルを読む過程は新しいチェーンテーブルを作る過程で、まず頭を空にして、ここにstudentクラスと同じデータがあって、ファイルを開くことに成功した後、中のデータを一つ一つ読んで、p 1に値を与えます.ここではチェーンテーブルの作成と同様に説明します.ソート 思想:もし、元のチェーンテーブルは無秩序で、私の最終的な目的は秩序を創造することです.そして、私はこの中の最大または最小の(遍歴すればいい)を見つける能力があります.では、私は新しいチェーンテーブルを作成しませんか.それは元のチェーンテーブルから取り出されたノードで構成されています.それは必然的に秩序があります.他の操作の最初と同様に,ヘッダとその後の一連のチェーンテーブルが伝達され,従来とは異なり,今回は直接ヘッダポインタの操作が開始された.(366と367は、空のヘッダが入ってくるのを防ぐためです.コアコードはwhiteのループです.第1のレイヤのループは、ヘッダを後ろに繰り返すことを目的としていますが、今回の目的は、終点までループすることです.期間中に1回実行するたびに、定義したポインタを再び同じブロックに向けさせます.第2のレイヤのループは、ヘッダです.の遍歴は、後が前より大きい場合は、後がmaxになると同時に前のノードを位置決めし、このようにマークした後、pを後ろに推進し続け、サイクル後に最大のフィルタリングを実現するために、見つけたらどうなるか、次の操作を見てみましょう.最初のif(379)他の場合、前のステップ(371 while)でmaxが見つかった以上、ここでそれを外し、マークした前の項目(pre)がmaxの後継者を指し、maxと元のテーブルとのつながりを切断する.2番目のif(387)私の目的はそれをその新しいチェーン時計の頭にすることです.前のいくつかのステップで、私たちはそれぞれmaxを見つけて、maxを分離して、ついにこのステップでmaxのために1つの着地を探します.もちろん、ifは初めて実行されるに違いない(上からpnewを空にしたので)、私たちは最大のノードを新しいチェーンテーブルの最初のノードにしました.それでは、その後の数回のサイクルで、毎回elseが実行され、中で新しく取り出したmaxがチェーンテーブルの後ろに一つ一つつながっていることがわかります.最後に、その大きなループがあることを忘れないでください.それは毎回中の内容を実行します.たとえば、元の無秩序チェーンテーブルでは、ノード(最大ノード)が1つずつ少なくなり、新しい秩序チェーンテーブルでは1つずつ多くなります. 元チェーンテーブルが終了した日、すなわち新しいチェーンテーブルが生成された時.その時、循環も完全に終わったので、頭の針をその新生チェーンテーブル(394)に向け、この秩序あるチェーンテーブルを共に指さして、伝えればいいのです.主関数の選択機能 ここには2つのブロックが含まれており、まずメニューインタフェースmenuであり、その戻り値は文字型であり、最後のcinによって書き込まれる.次にmain関数のswitchの選択機能に続き,intをcharで使わないのはユーザの乱送によるエラーを回避するためである.
以下、ソースコードを添付します.
C++でしばらく勉強した後、私たちはカリキュラム設計に入りました.私が選んだテーマは「新入生基本情報統計ソフト」です.学生の名前、性別、専門、生年月日、家庭の住所、英語の入学成績など、新入生が報告されます.チェーンテーブルクラスを設計して実現し、学生数を統計する必要があります.テキストインタフェース:
これは制御可能な長さのチェーンテーブルで、ある終了条件が現れるまで、絶えず新しい申請空間に頼っています.例えば、私の学生の名前が#のとき、現在のサイクルを飛び出して、入力を停止します.最初のノードでは特殊な処理が必要であり,すなわちヘッダノードを初期化し,その後申請空間,初期化,ポインタをずらすループが往復した.ポイントは最後のノードの後継者が空(NULL)になることです.
これは難点と言えますが、まずファイルを書き込むということです.すなわち、現在のブラックボックス---->txtファイルではofstream、ファイル出力ストリームクラス、openのtxtが使われています.なければ新しいものを作成し、もともとあれば上書きします.p 1に頭を付与した後、p 1が値を格納する限り、outが新しく作成したファイルに書き込み、p 1を次のファイルに移動させる.ファイルを読む過程は新しいチェーンテーブルを作る過程で、まず頭を空にして、ここにstudentクラスと同じデータがあって、ファイルを開くことに成功した後、中のデータを一つ一つ読んで、p 1に値を与えます.ここではチェーンテーブルの作成と同様に説明します.
以下、ソースコードを添付します.
#include
#include //
#include //
#include// , 。
#include //new,free
using namespace std;
int n=0;
/*
1. head , add,display ? ok
( ??)
2.free ? ok
3.
4. ok
5. ok
*/
char stop[12]={"#"};
char name[12];
class Student {
public:
char name[12];
char sex[3];
char study[12];
char addr[12];
int birth[3];
int engli;
Student *next;
};
class Studentmanage {
private:
Student *head,*p1,*p2,*p3;
public:
Studentmanage () {};
Student *creat();
Student *add(Student *head);
Student *delet(Student *head);
void *search(Student *head);
Student *modify(Student *head);
Student *sort(Student*head);
void display(Student *head);
void displaynode(Student *head);
void write_file(Student *head);
Student * read_file();
~Studentmanage () {};
};
Studentmanage s;
Student *Studentmanage::creat() {
p1=p2=new Student;
head=NULL;
cout<>p1->name;
if( strcmp(stop,p1->name)==0 ) {
break;
}
cout<>p1->sex;
cout<>p1->study;
cout<>p1->addr;
cout<>p1->birth[0];
cout<> p1->birth[1];
cout<>p1->birth[2];
cout<>p1->engli;
system("cls");
n=n+1;
if(n==1)
head=p1;
else
p2->next=p1;
p2=p1;
p1=new Student;
}
p2->next=NULL;
return head;
}
Student *Studentmanage::add(Student *head) {
p1=p3=new Student;
p1=head;
if(p1==NULL)
{cout<>p3->name;
cout<>p3->sex;
cout<>p3->study;
cout<>p3->addr;
cout<>p3->birth[0];
cout<> p3->birth[1];
cout<>p3->birth[2];
cout<>p3->engli;
cout<next=p1->next;
p1->next=p3;
cout<>name;
p2=p1=head;
int j=0;
if( ( strcmp(name,head->name)==0 ) && (head!=NULL))
{
head=head->next;
free(p1);
j=1;
}
else
{
p1=head->next;
while(p1!=NULL) {
if(strcmp(name,p1->name)==0) {
p2->next=p1->next;
free(p1);
j=1;
break;
} else {
p2=p1;
p1=p2->next;
}
}
}
if(j==0)
cout<>name;
p1=head;
int j=0;
while(p1!=NULL) {
if( strcmp(name,p1->name)==0 ) {
s.displaynode(p1);
break;
}
p1=p1->next;
}
if(j==0)
cout<>name;
if(strcmp( name, head->name)==0) {
cout<>name1;
cout<>sex;
cout<>study;
cout<>addr;
cout<>birth[0];
cout<>birth[1];
cout<>birth[2];
cout<>engli;
strcpy(head->name,name1);
strcpy(head->sex,sex);
strcpy(head->study,study);
strcpy(head->addr,addr);
head->birth[0]=birth[0];
head->birth[1]=birth[1];
head->birth[2]=birth[2];
head->engli=engli;
j=1;
} else {
p1=head->next;
while(p1!=NULL) {
if(strcmp(p1->name,name)==0)
cout<>name1;
cout<>sex;
cout<>study;
cout<>addr;
cout<>birth[0];
cout<>birth[1];
cout<>birth[2];
cout<>engli;
strcpy(p1->name,name1);
strcpy(p1->sex,sex);
strcpy(p1->study,study);
strcpy(p1->addr,addr);
p1->birth[0]=birth[0];
p1->birth[1]=birth[1];
p1->birth[2]=birth[2];
p1->engli=engli;
j=1;
break;
}
}
if(j==0)
cout<next;
}
}
}
void Studentmanage::displaynode(Student *head) {
p1=head;
if(p1==NULL)
cout<name<sex<study;
cout<addr<birth[0]<birth[1]<birth[2]<birth[0]<engli<>name2>>sex>>study>>addr>>birth[0]>>birth[1]>>birth[2]>>engli)
{
strcpy(p1->name,name2);
strcpy(p1->sex,sex);
strcpy(p1->study,study);
strcpy(p1->addr,addr);
p1->birth[0]=birth[0];
p1->birth[1]=birth[1];
p1->birth[2]=birth[2];
p1->engli=engli;
i++;
if(i==1) {
head=p2=p1;
} else {
p2->next=p1;
}
p2=p1;
p1=new Student;
p1->next=NULL;
}
cout<name<sex<study<addr<birth[0]<birth[1]<birth[2]<engli<next;
}
out.close();
cout<next!=NULL) {
p=pmax=ppre=head;
while(p->next!=NULL) {
if(p->next-> birth[0] > pmax->birth[0]) {
pmax=p->next;
ppre=p;
}
p=p->next;
}
if(head==pmax) {
head=head->next;
pmax->next=NULL;
} else {
ppre->next=pmax->next;
pmax->next=NULL;
}
if(pnew==NULL) {
pnew=pmax;
} else {
pmax->next=pnew;
pnew=pmax;
}
}
head->next=pnew;
pnew=head;
return head;
}
}
char menu() {
system("cls");
char ch;
cout<>ch;
return ch;
}
int main ()
{
Studentmanage s;
Student *head;
head=NULL;
int n=0;
char c;
cout<