1. 程式人生 > >C++學生資訊管理系統

C++學生資訊管理系統

平臺:Window,Linux都可

語言:C++

完成日期:2017.1.17

功能:能開啟程式時,自動載入已經在檔案中的資料,那檔案就相當於資料庫,當關閉程式時,自動儲存資料到檔案中。

          當然增加,刪除,修改,排序,清空等也是必不可少的。但這個學生資訊有點少,我就寫了名字和號碼。其他成績什麼的就不加進去了,儘量顯得簡單。

#include<iostream>
#include<fstream> 
#include<string.h> 
using namespace std;

/*學生資訊結點*/
class Student
{
	public:
	char name[20];
	int num;
	Student *next;
	
	void input();
	void ReadFile(ifstream &in);
};

/*往結點輸入資訊*/
void Student::input()
{
	cout<<"please enter student's name:";
	cin>>name;
	cout<<"please enter student's num:";
	cin>>num;
	return ; 
}

/*從文件中讀取值到結點*/
void Student::ReadFile(ifstream &in)
{
	in>>name>>num;
}

/*學生資訊結點連結串列*/
class StudentMessage
{
	public:
	StudentMessage();	
	~StudentMessage();
	
	/*關於學生資訊這個類所用到的函式*/
	void Show_Menu();
	void Add_Node();
	void Del_node();
	void Display();
	void Find(); 
	void Modify();
	void Load();
	void Save();
	void Clean();
	void Swap_node(Student *q,Student*p);
	void Sort(); 
	
	private: 
	/*StudentMessage類可以看作是以Studet類為結點的連結串列*/ 
	Student *head;  //連結串列頭 
	Student *end;	//連結串列尾 
	
	ifstream in;
	ofstream out;
};

/*建構函式*/
/*這個建構函式可以在開啟程式時,就自動載入原有的學生資訊*/ 
StudentMessage::StudentMessage()
{
	/*初始化,頭尾結點*/ 
	head = new Student;
	head->next = new Student;
	end = head->next; 
	
	ifstream in("file.txt"); //原有的學生資訊是放在檔案file.txt中的 
	
	/*Important Part!*/
	/*下面很關鍵,不這樣做的話達不到效果。首先要先向檔案讀一下,才能判斷
	檔案是否為空,因為eof()不能用來判斷檔案是否為空,eof()是根據檔案的狀態標識
	來判斷檔案是否為空的,當讀取檔案時,遇到結尾時,系統會改變檔案的狀態標識
	,這時候才會返回EOF,才能用eof()判斷。不先讀一下的話,in.eof()是不會返回
	正值的,即使檔案為空*/
	char ch = in.get();
	if(in.eof())
	{
		cout<<"file is empty"<<endl;
	}
	
	/*若檔案非空*/	
	while(!in.eof())
	{
		end->ReadFile(in);
		if(end->name[0]=='\0')break;  //這裡也是比較關鍵的,不加這一句的話
									 //程式會把檔案最後結束的標記也都出來		
		end->next = new Student;
		end = end->next;
	}
}

/*解構函式*/
StudentMessage::~StudentMessage()
{
	Save();    //當正常退出程式的時候,儲存資料到file.txt中 
	Student *pos = head->next;
	Student *temp;
	while(pos!=end)
	{
		temp = pos;
		pos = pos->next;
		delete temp;
	}
	delete head,end;
}

/*
/*增加結點*/
void StudentMessage::Add_Node()
{
	char quit;
	while(1)
	{
		end->input();
		end->next = new Student;
		end = end->next;
		
		cout<<"continue or not?,Y/N"<<endl;
		cin>>quit;
		switch(quit)
		{
			case'Y':
			case'y':break;
			case'n':
			case'N':return;break;
			default:cout<<"error input,again,please..Y/N";
					cin>>quit;
		}
	}
	cout<<"add node success!"<<endl;
	system("pause");
}


/*修改結點*/
void StudentMessage::Modify()
{
	char name[20];
	cout<<"enter the name you want to modify:";
	cin>>name;
	
	Student *pos = head->next;
	for(pos;pos!=end;pos=pos->next)
	{
		if(strcmp(name,pos->name)==0)
		{
			pos->input();
			break;
		}	
	}
	cout<<"Modify success!..."<<endl;
	system("pause");
} 

/*刪除結點*/
void StudentMessage::Del_node()
{
	int del_flag = 0;
	char name[20];
	if(head->next == end)
	{cout<<"Empty...."<<endl;return;}
	
	cout<<"please enter the name you want to delete:";
	cin>>name;
	
	Student *p = head->next;
	Student *q = head; 
	
	for(p;p!=end;p->next)
	{
		if(strcmp(p->name,name)==0) 
		{
			del_flag = 1;
			q->next = p->next;
			delete p;
			break;		
		}
		else
		{
			q=q->next;
			p=p->next;
		}
	}	
	if(del_flag == 0)
	{cout<<"Can not Find the name you want."<<endl;}
	
	cout<<"del node success!"<<endl;
	system("pause");
} 

/*查詢學生資訊*/
void StudentMessage::Find()
{
	char name[20];
	cout<<"please enter name you want to find:";
	cin>>name;

	Student *pos = head->next;
	if(pos==end)
	{
		cout<<"Student Message is Empty..."<<endl;
		return ;
	}
	
	for(pos;pos!=end;pos=pos->next)
	{
		if(strcmp(pos->name,name)==0)
		{
			cout<<"Find it!"<<endl;
			cout<<"name:"<<pos->name<<endl;
			cout<<"num:"<<pos->num<<endl;
			return;
		}
	}
	cout<<"Can not Find the name...";
}

/*儲存學生資訊*/
void StudentMessage::Save()
{
	out.open("file.txt");
	Student *pos = head->next;
	if(head->next== end)
	{
		cout<<"StudentMessage List is Empty...."<<endl;
		return ;
	}
	else
	{
		for(pos;pos!=end;pos=pos->next)
		{
			out<<'\t'<<pos->name<<'\t'<<pos->num;//格式最好這樣寫
										//因為一開始會把檔案讀一下,以判斷
										//檔案是否為空,所以前面最後用‘\t’
										//來增加幾個空格,給他讀一個空格,
										//以不讀到正常資料,後面就不要有空格
										//以為當程式從file.txt讀資訊時,可能
										//會把空格也當是一個數據結點讀程序序	
		}
	}
	out.close();
	
	cout<<"Save node success!"<<endl;
}

/*顯示結點*/
void StudentMessage::Display()
{
	if(head->next==end)
	{cout<<"Empty..."<<endl;}
	
	Student *pos;
	pos = head->next;
	for(pos;pos!=end;pos=pos->next)
	{
		cout<<endl;
		cout<<pos->name<<endl;
		cout<<pos->num<<endl;
		cout<<endl;
	}
	system("pause");
}

/*結點交換*/
void StudentMessage::Swap_node(Student *q,Student *p)
{
	char Tname[20];
	int Tnum;
	
	strcpy(Tname,p->name);
	Tnum = p->num;
	
	strcpy(p->name,q->name);
	p->num = q->num;
	
	strcpy(q->name,Tname);
	q->num = Tnum;	
}

/*以num位準排序*/
void StudentMessage::Sort()
{
	Student *p,*q;
	p=head->next;
	
	/*氣泡排序*/
	for(p;p!=end;p=p->next)
	{
		for(q=p->next;q!=end;q=q->next)
		{
			if(q->num > p->num)
			{
				Swap_node(q,p);		
			}	
		}
	} 
	cout<<"sort success!"<<endl;
	system("pause");
}

/*清空文件*/
void StudentMessage::Clean()
{
	ofstream out("file.txt",ios::trunc);
	out.close();
	exit(0);//用exit使程式退出程式的時候,不呼叫StudentMessage類的解構函式,
			//否則又會把記憶體的資料寫到file.txt檔案中 
}

/*顯示選單*/
void StudentMessage::Show_Menu()
{
	cout<<"0.退出程式"<<endl;
	cout<<"1.增加結點"<<endl;
	cout<<"2.刪除結點"<<endl;
	cout<<"3.顯示所有學生資訊"<<endl; 
	cout<<"4.修改學生資訊"<<endl; 
	cout<<"5.查詢學生資訊"<<endl;
	cout<<"6.清空文件"<<endl;
	cout<<"7.排序"<<endl; 
} 

int main()
{
	StudentMessage sm;    //建立類物件,並呼叫其建構函式
					     //把file.txt中的學生資訊資料讀到記憶體中		
	int choice;
	
	while(1)
	{
		sm.Show_Menu();
		cout<<"please enter your choice:";
		cin>>choice;
		switch(choice)
		{
			case 0:return 0;break;
			case 1:sm.Add_Node();break;
			case 2:sm.Del_node();break;
			case 3:sm.Display();break;		
			case 4:sm.Modify();break;
			case 5:sm.Find();break;
			case 6:sm.Clean();break;
			case 7:sm.Sort();break;
		}		
		system("cls");	
	}
	return 0;
}

相關推薦

程式閱讀 簡單C 學生資訊管理系統

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

C++學生資訊管理系統

平臺:Window,Linux都可 語言:C++ 完成日期:2017.1.17 功能:能開啟程式時,自動載入已經在檔案中的資料,那檔案就相當於資料庫,當關閉程式時,自動儲存資料到檔案中。           當然增加,刪除,修改,排序,清空等也是必不可少的。但這個學生資訊有

C++課設案例 學生資訊管理系統

#include <iostream> #include <string> #include <windows.h> #include <iostream> #include <fstream> #include <conio.h&g

c#簡易學生資訊管理系統

在近期的學習中,我們學習了泛型及泛型集合的概念和使用,泛型是c#中的一個重要概念,為了鞏固我們學習的成果,我們可以使用一個例項來進行練習 題目及要求 要求使用Windows窗體應用程式,製作出如上圖的介面,並實現增刪改查的功能 StuInfo類的編寫 同往常一樣,在編寫窗體的程式碼前,我們需要先編

C語言陣列實現學生資訊管理系統

概述   單純只用多個數組管理學生成績資訊,不使用結構體,該程式最主要的難點是依據學號或總成績對學生資訊進行排序,藉助了臨時陣列來標記排好序的下標。   執行結果如下:   輸入資料:   列印資料:   根據

c語言學生資訊管理系統(連結串列、檔案)

#include<stdio.h>                                               /*呼叫標頭檔案*/ #include<stdlib.h> #include<string.h> #inclu

學生資訊管理系統c++

一個簡單的c語言學生資訊管理系統,是控制檯程式。 執行介面如下,功能已經全部實現 void function();//所有操作在該函式下進行 void init();//歡迎介面 void menu(

C語言實現一個列表式的學生資訊管理系統(完善)

http://blog.csdn.net/morixinguan/article/details/77489633上節,我們實現了學生資訊管理系統的大多數功能,但還有兩個功能沒有實現,就是學生資訊修改還有學生資訊刪除了。當然,程式中依然存在諸多的BUG,比如,scanf和ge

順序表構建學生資訊管理系統C++)

順序表構建學生資訊管理系統–C++樣例 對於本文的任何建議和問題都可留言,我們共同探討,進步和提高。 上次編寫了根據單鏈表進行構建學生管理系統的C++樣例,本次使用順序表進行構建。單鏈表與順序表各有利弊,順序表能夠快速的進行定位,但是必須事先指定表的

學生資訊管理系統c++)

         學生資訊管理系統(c++) 該課程設計含有兩個模組:  (1)教師許可權模組  (2)學生許可權模組  學生許可權模組含有1)增加2)顯示3)追加4)查詢  學生資訊功能  教師許可權模組含有1)增加2)顯示3)追加4)查詢 5)修改 6)刪除 學生資訊功能  用到的主要知識   (1)類

c++實現學生資訊管理系統

#include #include #include<string.h> using namespace std; #define MAXSIZE 20 class aclass; class student { private: long no;

C語言 學生資訊管理系統

前文是樓主的一些經歷,給大家分享一下,希望能夠幫到大家。文中有不足的地方還請指出,我們一同探討,或者可以直接看正文(恩~第一次在這兒發帖確實有點小激動O(∩_∩)O~)。 |前文| 我是一名職高學生,入校選擇專業時毫不猶豫選擇了計算機,只因對此擁有濃厚

C語言《學生資訊管理系統》連結串列+檔案操作

今天帶來的是一個連結串列版本的《學生資訊管理系統》,功能包括:新增、顯示、查詢、刪除、儲存、讀取,等功能模組,連結串列是C語言的進階內容,希望大家好好學習,這裡的程式碼可能會有一些瑕疵,希望大家提供意見或建議 主介面 顯示功能: 查詢功能: 這裡只展示了學號查

C語言小專案(學生資訊管理系統

/* 執行環境:我是在linux裡面用gcc編譯的,在windows裡應該也能執行,用的一些檔案庫函式都是c標準庫,沒有用linux的系統呼叫(糾正一下:system("clear")這個系統呼叫是linux的,windows裡面用system("cls") )

學生資訊管理系統c語言)

#include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <string.h> #define LEN sizeof(STD) typedef st

C語言課程設計之學生資訊管理系統

#include"stdio.h" //標準的輸入輸出函式檔案頭部說明 #include"math.h" // 數學函式頭部說明 #include"string.h" #include"stdlib.h" //通過該函式頭部裡的

C++課程設計:學生資訊管理系統

課程設計內容 1.)學生資訊的錄入:錄入新的學生的資訊; 2.)學生資訊的新增:新增新的學生的資訊; 3.) 學生資訊的刪除:刪除不需要的學生的資訊。 4.)學生資訊的查詢:查詢你需要的學生的資訊。 5.)學生資訊的修改:修改錯誤的學生的資訊。 6.)學生資訊的顯示:顯示所

linux下使用C語言實現簡易的學生資訊管理系統

該專案資料儲存方式使用的是動態陣列,所以需要用到動態陣列庫,具體庫檔案參考->我的動態陣列庫<-上的兩個檔案 ArrayLib.h 和 ArrayLib.c 學生管理系統的檔案有三個 main.c、stuSystem.h 和 stuSystem.c,

Android核心技術-day05-03-學生資訊管理系統小練習

package com.gaozewen.studentsystem.db; import android.content.ContentValues; import android.content.Context; import android.database.Curso

學生資訊管理系統資料庫課程設計

一.概述 學生資訊管理系統是學校管理的重要工具,是學校不可或缺的一部分。隨著在校人數的不斷增加,教務系統的數量也不斷的上漲。學校工作繁雜,資料眾多,人工管理資訊的難度也越來越大,顯然是不能滿足實際的需要,效率也是很低的。並且這種傳統的方式存在著眾多的弊端,如:保密性差.查詢不便.效率低,很難維