精华内容
下载资源
问答
  • - PAGE I - 设计 20 届 基于JAVA的学生通讯录管理系统设计和实现 所在学院 专业班级 信息与计算科学 学生姓名 学号 指导教师 职称 完成日期 年 月 摘要: 本文首先介绍了Java语言其中包括对它的平台架构以及特点的...
  • 一、题目容的描述学生通讯录管理系统设计设 计 一 个 学 生 通 信 录 , 学 生 通 迅 录 数 据 信 息 构 成 容 可 自 行 设 计( 如:、家庭地址、邮政编码、等等 ) ,通信录数据类型定义为结构体类型。由键盘输入...

    .专业整理 .

    一、题目容的描述

    学生通讯录管理系统设计

    设 计 一 个 学 生 通 信 录 , 学 生 通 迅 录 数 据 信 息 构 成 容 可 自 行 设 计

    ( 如:、家庭地址、邮政编码、等等 ) ,通信录数据类型定义为结构体类

    型。由键盘输入数据(最好要考虑输入数据输入的格式及输入数据的有

    效性),然后进行以下的功能实现。程序要求主函数是一个功能选择菜

    单,其它各功能都用各自的函数实现。

    功能要求如下:

    1、能建立、修改和增删学生通讯录

    2、能够按多种方式进行查询,例如按、按等。

    3、 通讯录的数据保存在文件中,运行程序时将通讯录数据从文件

    读取到存中。对通讯录进行增加、删除、 修改学生数据后,提

    供功能菜单,可以将存中修改过的通讯录重新保存至文件。

    二、应用程序功能的详细说明

    1、应用程序实现了可视化的系统操作界面。

    2、对学生通讯录形成了系统化的管理,操作简便明了。

    3、 程序具有系统帮助,添加、显示、查询、刷新、删除、排序、

    保存、修改、读取学生通讯录的功能。各项功能均可按照文字

    提示操作,浅显易懂。

    4 、 系 统 的 各 个 功 能 模 块 都 用 函 数 的 形 式 来 实 现 (readfile() 、

    seek() 、modify() 、sort() 、insert() 、del() 、save() 、menu() )

    方便查看。

    5. 可 以将 信息 保存 在 文件 ("student.txt" )中 ,亦可将信息 从文

    件中读取出来,灵活方便。

    .学习帮手 .

    .专业整理 .

    三、主要模块的算法描述

    学生通讯录管理系统

    汇 刷 查 增 显 系 退

    总 新 询 加 示 统 出

    当 学 学 学 学 帮 系

    前 生 生 生 生 助 统

    学 信 信 信 信

    生 息 息 息 息

    数 help()

    seek() insert()

    readfile() display()

    number()

    修改学生信息 modify() 删除学生信息 del()

    保存当前学生信息 save()

    查询学生信息

    按学号查询 退出

    按姓名查询

    .学习帮手 .

    .专业整理 .

    开始

    展开全文
  • 最简单的通讯录管理系统设计一个学生通信录,学生通迅录数据信息构成内容可自行设计(如:姓名、家庭地址、邮政编码、电话号码等等),通信录数据类型定义为结构体类型。 1.主要功能: (1) 能建立、修改和增删学生...
  • c++课程设计学生通讯录管理系统,课程设计标准范本
  • 学生通讯录管理系统

    2019-04-20 12:05:04
    用c语言实现的学生通讯录管理系统,此为一个大学生的c语言作业,在该系统中,登录和添加,删除,添加,保存等等功能都具备,比较完善,页面背景也较为直观和丰富。
  • 设计一个实用的学生通讯录管理系统,能以简便高效的方式对通讯录进行管理和检索,具体要示: 录入:学生通讯录信息包括:学号,姓名,地址,电话。以结构数组或数据文件的形式存放通讯录信息。 更新:增加、删除...
  • C++实现学生通讯录管理系统

    万次阅读 多人点赞 2017-04-19 17:48:23
    学生通讯录管理系统本人是一个在校大学生,在读大二,最近做了一个C++课程设计学生通讯录管理系统,以实现学生各种信息(学号,姓名,联系方式等)的录入加载保存修改删除等。 学生通讯录管理系统课程设计报告...

    学生通讯录管理系统

    本人是一个在校大学生(2016年),在读大二,最近做了一个C++课程设计学生通讯录管理系统,以实现学生各种信息(学号,姓名,联系方式等)的录入加载保存修改删除等。欢迎大家交流指点技术。
    

    学生通讯录管理系统课程设计报告(点击进入下载页)

    • 使用C++编写,简单通俗

    • 菜单栏

    Markdown及扩展

    • UML图

    自己画的UML图

    源代码

    两个类Addressbook和person

    	#include <iostream>
    	#include <fstream>
    	#include <string>
    	#include <iomanip>
    	using namespace std;
    	int Enterflag=0;           //定义输入次数的全局变量
    
    	class person
    	{
    	protected:
    		int firstname;          //学号前缀
    		int Num;                //学号
    		char name[40];          //姓名
    		char sex[10];			//性别
    		int age;				//年龄
    		char tel[20];           //电话
    		char email[60];			//邮箱
    		char postcode[10];		//邮编
    		char IDnumber[30];		//身份证号
    		person *mynext;         //下一个学生指针
    	public:
    		person();
    		person(int pNum,int pfirstname,char pname[],char psex[],int page,char ptel[],char pemail[],char ppostcode[],char pIDnumber[]);
    		person(int pNum,int pfirstname,char pname[],char psex[],int page,char ptel[],char pemail[],char ppostcode[],char pIDnumber[],person *next);
    		int getfirstname();
    		int getNum();
    		char *getname();
    		char *getsex();
    		int getage();
    		void getage(int ag);
    		char *gettel();
    		char *getemail();
    		char *getpostcode();
    		char *getIDnumber();
    		person *getnext();
    		void setnext(person *next);
    		void output();
    	};
    	
    	person::person()
    	{
    		Num=0;
    		firstname=0;
    		strcpy(name,"");
    		strcpy(sex,"");
    		age=0;
    		strcpy(tel,"");
    		strcpy(email,"");
    		strcpy(postcode,"");
    		strcpy(IDnumber,"");
    		mynext=NULL;
    	}
    	person::person(int pNum,int pfirstname,char pname[],char psex[],int page,char ptel[],char pemail[],char ppostcode[],char pIDnumber[])
    	{
    		Num=pNum;
    		firstname=pfirstname;
    		strcpy(name,pname);
    		strcpy(sex,psex);
    		age=page;
    		strcpy(tel,ptel);
    		strcpy(email,pemail);
    		strcpy(postcode,ppostcode);
    		strcpy(IDnumber,pIDnumber);
    		mynext=NULL;
    		
    	}
    	person::person(int pNum,int pfirstname,char pname[],char psex[],int page,char ptel[],char pemail[],char ppostcode[],char pIDnumber[],person *next)
    	{
    		Num=pNum;
    		firstname=pfirstname;
    		strcpy(name,pname);
    		strcpy(sex,psex);
    		age=page;
    		strcpy(tel,ptel);
    		strcpy(email,pemail);
    		strcpy(postcode,ppostcode);
    		strcpy(IDnumber,pIDnumber);
    		mynext=next;
    	}
    	int person::getNum()
    	{
    		return Num;
    	}
    	int person::getfirstname()
    	{
    		return firstname;
    	}
    	char *person::getname()
    	{
    		return name;
    	}
    	char *person::getsex()
    	{
    		return sex;
    	}
    	int person::getage()
    	{
    		return age;
    	}
    	void person::getage(int ag)
    	{
    		age=ag;
    	}
    	char *person::gettel()
    	{
    		return tel;
    	}
    	char *person::getemail()
    	{
    		return email;
    	}
    	char *person::getpostcode()
    	{
    		return postcode;
    	}
    	char *person::getIDnumber()
    	{
    		return IDnumber;
    	}
    	person *person::getnext()
    	{
    		return mynext;
    	}
    	void person::setnext(person *next)
    	{
    		mynext=next;
    	} 
    	void person::output()
    	{
    		cout<<"--------------------------------------------------------------------------------------------------------------------"<<endl;
    		cout<<setw(12)<<"学号"<<setw(20)<<"姓名"<<setw(9)<<"性别"<<setw(8)<<"年龄";
    		cout<<setw(8)<<"电话"<<setw(22)<<"邮箱"<<setw(16)<<"邮编"<<setw(12)<<"身份证号"<<endl;
    		cout<<"--------------------------------------------------------------------------------------------------------------------"<<endl;
    		cout<<setw(14)<<firstname<<setw(4)<<Num<<setw(15)<<name<<setw(7)<<sex<<setw(8)<<age;
    		cout<<setw(13)<<tel<<setw(26)<<email<<setw(8)<<postcode<<setw(20)<<IDnumber<<endl;
    		cout<<"--------------------------------------------------------------------------------------------------------------------"<<endl;
    	}
    	class AddressBook
    	{
    	private:
    		person *myfirst;			//指向联系人人员的指针
    	public:
    		AddressBook();
    		AddressBook(int npNum,int firstname,char npname[],char npsex[],int npage,char nptel[],char npemail[],char nppostcode[],char npIDnumber[]);
    		~AddressBook();
    		
    		void displayRecord();		//显示记录
    		bool queryRecord();			//查询记录
    		bool queryRecord(int firstname,int  fNum);
    		//有参查询函数,学号查询
    		void addRecord();			//添加或新建记录
    		void input(int number,int firstname);     //键盘读入新成员信息、
    		void insert(int npNum,int firstname,char npname[],char npsex[],int npage,char nptel[],char npemail[],char nppostcode[],char npIDnumber[]);
    		//成员链表插入新成员信息
    		bool update();	            //修改记录
    		bool removeRecord();		//删除记录
    		void saveRecords();			//保存记录
    		void loadRecords();			//读取记录
    		void clear();				//清空当前通讯录
    	};
    	
    	AddressBook::AddressBook()
    	{
    		myfirst=NULL;
    	}
    	
    	AddressBook::AddressBook(int npNum,int npfirstname,char npname[],char npsex[],int npage,char nptel[],char npemail[],char nppostcode[],char npIDnumber[])
    	{
    		myfirst=new person(npNum,npfirstname,npname,npsex,npage,nptel,npemail,nppostcode,npIDnumber);
    	}
    	AddressBook::~AddressBook()
    	{
    		person *next=myfirst,*temp;
    		while(next!=NULL)
    		{
    			temp=next;
    			next=next->getnext();
    			delete temp;
    		}
    		myfirst=NULL;
    	}
    	//添加或新建记录
    	void AddressBook::addRecord()
    	{
    		int tempnum,tempfirstname,number1,number2;
    		char flag[5];
    		person *per=myfirst;
    		if(per==NULL)
    		{
    			cout<<"目前没有学生通讯录信息,请键盘输入添加(Y)或直接返回程序主菜单(N):";
    			cin>>flag;
    			while(1)
    			{
    				if(strcmp(flag,"Y\0")==0)
    				{
    					while(1)
    					{
    						cout<<"请输入学生的学号前缀:";
    						cin>>tempfirstname;
    						if(tempfirstname<0)
    						{
    							cout<<"输入错误,请重新输入!";
    							continue;
    						}
    						break;
    						
    					}
    					while(1)
    					{
    						cout<<"请输入学生的尾号后4位:";
    						cin>>tempnum;
    						if(tempnum<1000||tempnum>9999)
    						{
    							cout<<"输入错误,请重新输入!";
    							continue;	
    						}
    						else
    						{
    							input(tempnum,tempfirstname);
    							cout<<"是否继续添加(Y/N):";
    							cin>>flag;
    							if((strcmp(flag,"N\0")==0))
    							return;	
    							addRecord();
    						}
    					}
    				}
    				else if((strcmp(flag,"N\0")==0))
    				{
    					Enterflag=0;
    					return;
    				}
    				else
    				{
    					cout<<"输入错误,请键盘输入添加(Y)或直接返回程序主菜单(N):";
    					cin>>flag;
    					continue;
    				}	
    			}
    		}
    		else
    		{
    			cout<<"目前已有的学生信息:"<<endl;
    			displayRecord();
    			cout<<"学号前缀是否与最后一个同学相同?(Y/N):";
    			cin>>flag;
    			while(1)
    			{
    				if(strcmp(flag,"N\0")==0)
    				{
    					while(strcmp(flag,"N\0")==0)
    					{
    						cout<<"请输入学生的学号前缀:";
    						cin>>tempfirstname;
    						if(tempfirstname<0)
    						{
    							cout<<"输入错误,请重新输入!";
    							continue;
    						}
    						break;
    						
    					}
    					while(strcmp(flag,"N\0")==0)
    					{
    						cout<<"请输入学生的尾号后4位:";
    						cin>>tempnum;
    						if(tempnum<1000||tempnum>9999)
    						{
    							cout<<"输入错误,请重新输入!";
    							continue;	
    						}
    						input(tempnum,tempfirstname);
    						break;		
    					}
    					break;
    				}
    				else if(strcmp(flag,"Y\0")==0)
    				{
    					while(strcmp(flag,"Y\0")==0)
    					{
    						cout<<"请输入学生的尾号后4位:";
    						cin>>tempnum;
    						if(tempnum<1000||tempnum>9999)
    						{
    							cout<<"输入错误,请重新输入!";
    							continue;	
    						}
    						break;		
    					}
    					if(per->getnext()==NULL)
    					{
    						number1=per->getfirstname();
    						input(tempnum,number1);
    					}
    					else
    					{
    						while(per->getnext()!=NULL)
    							per=per->getnext();
    						number2=per->getfirstname();
    						input(tempnum,number2);
    					}
    				}
    				break;
    			}
    		}
    	}
    	//显示记录
    	void AddressBook::displayRecord()
    	{
    		person *head=myfirst;
    		cout<<"--------------------------------------------------------------------------------------------------------------------"<<endl;
    		cout<<setw(12)<<"学号"<<setw(20)<<"姓名"<<setw(9)<<"性别"<<setw(8)<<"年龄";
    		cout<<setw(8)<<"电话"<<setw(22)<<"邮箱"<<setw(16)<<"邮编"<<setw(12)<<"身份证号"<<endl;
    		int i=0; 
    		while(head!=NULL)
    		{
    			i++;
    			cout<<"--------------------------------------------------------------------------------------------------------------------"<<endl;
    			cout<<setw(14)<<head->getfirstname()<<setw(4)<<head->getNum()<<setw(15)<<head->getname()<<setw(7)<<head->getsex()<<setw(8)<<head->getage();
    			cout<<setw(13)<<head->gettel()<<setw(26)<<head->getemail()<<setw(8)<<head->getpostcode()<<setw(20)<<head->getIDnumber()<<endl;
    			head=head->getnext();
    		}
    		cout<<"--------------------------------------------------------------------------------------------------------------------"<<endl;
    		cout<<"目前总共有"<<i<<"个学生数据"<<endl;
    	}
    	//清空当前通讯录
    	void AddressBook::clear()
    	{
    		person *head=myfirst;
    		person *fhead=head;
    		ofstream fout("addressbook.txt",ios::trunc);
    		while(head!=NULL)
    		{
    			fhead=head->getnext();
    			delete head;
    			head=fhead;
    			
    		}
    		myfirst=NULL;
    		fout.close();
    		cout<<"数据清除完毕!\n";
    	}
    	
    	//查询记录,有参,学号
    	bool AddressBook::queryRecord(int stufirstid,int foNum)
    	{
    		person *head=myfirst;
    		person *fhead=head;
    		while(head!=NULL)
    		{
    	
    			if(head->getfirstname()==stufirstid&&head->getNum()==foNum)
    			{	
    				head->output();
    				return true;
    			}
    			else
    			{
    				fhead=head;
    				head=head->getnext();
    			}
    		}
    		return false;
    	}
    	//查询记录,无参
    	bool AddressBook::queryRecord()
    	{
    		int stuid,stufirstid,k;
    		char stustr[60];
    		person *head=myfirst;
    		person *fhead=head;
    		while(1)
    		{
    			cout<<"请确定使用何种方法查找学生信息.\n1.姓名 2.学号:";
    			cin>>k;
    			if(k!=1&&k!=2)
    			{	
    				cout<<"输入错误,请重新输入!";
    				continue;
    			}
    			switch(k)
    			{
    			case 1:
    				{
    					cout<<"请输入学生的姓名:";
    					cin>>stustr;
    					if(head==NULL)
    					{
    						cout<<"本校暂无学生信息!"<<endl;
    						return false;
    					}
    					else
    					{
    						while(head!=NULL)
    						{
    							if(strcmp(head->getname(),stustr)==0)
    							{
    								head->output();
    								if(head->getnext()==NULL)
    								return true;
    							}
    								fhead=head;
    								head=head->getnext();
    						}
    						cout<<"本校无此学生信息!"<<endl;
    						return false;
    					}
    				}
    				break;
    			case 2:
    				{
    					cout<<"请输入学生的学号前缀:";
    					cin>>stufirstid;
    					cout<<"请输入学生的学号尾号后4位:";
    					cin>>stuid;
    					if(head==NULL)
    					{
    						cout<<"本校暂无学生信息!"<<endl;
    						return false;
    					}
    					else
    					{
    						while(head!=NULL)
    						{
    							if(head->getfirstname()==stufirstid&&head->getNum()==stuid)
    							{
    								head->output();
    								return true;
    							}
    							else
    							{
    								fhead=head;
    								head=head->getnext();
    							}
    						}
    						cout<<"本校无此学生信息!"<<endl;
    						return false;
    					}
    				}
    				break;
    			}
    		}
    	}
    	//键盘读入新成员信息、
    	void AddressBook::input(int number,int firstname)
    	{
    		int page;
    		char pname[40],psex[10],ptel[20],pemail[60],ppostcode[10],pIDnumber[30];
    		cout<<"请输入学号为"<<firstname<<number<<"的信息:"<<endl;
    		cout<<"姓名:";
    		cin>>pname;
    		cout<<"性别:";
    		cin>>psex;
    		cout<<"年龄:";
    		cin>>page;
    		cout<<"电话号码:";
    		cin>>ptel;
    		cout<<"邮箱:";
    		cin>>pemail;
    		cout<<"邮编:";
    		cin>>ppostcode;
    		cout<<"身份证号:";
    		cin>>pIDnumber;
    		insert(number,firstname,pname,psex,page,ptel,pemail,ppostcode,pIDnumber);
    	}
    	//成员链表插入新成员信息
    	void AddressBook::insert(int npNum,int npfirstname,char npname[],char npsex[],int npage,char nptel[],char npemail[],char nppostcode[],char npIDnumber[])
    	{
    		person *pers=myfirst;
    		if(pers==NULL)
    			myfirst=new person(npNum,npfirstname,npname,npsex,npage,nptel,npemail,nppostcode,npIDnumber);
    		else
    		{
    			while(pers->getnext()!=NULL)
    				pers=pers->getnext();
    			pers->setnext(new person(npNum,npfirstname,npname,npsex,npage,nptel,npemail,nppostcode,npIDnumber,pers->getnext()));
    		}
    	}
    	//修改记录
    	bool AddressBook::update()
    	{
    		int number,number2;
    		char flag[5];
    		person *head=myfirst;
    		person *fhead=head;
    		cout<<"请输入要修改的学生学号前缀:";
    		cin>>number;
    		cout<<"请输入要修改的学生学号尾号后4位:";
    		cin>>number2;
    		if(head==NULL)
    		{
    			cout<<"本校目前没有学生!"<<endl;
    			return false;
    		}
    		else 
    			while(head!=NULL)
    			{
    				if(head->getfirstname()==number&&head->getNum()==number2)
    				{
    					cout<<"您要修改的学生信息如下:"<<endl;
    					head->output();
    					while(1)
    					{
    						int i;
    						float newnumber;
    						char newtxt[60];
    						cout<<"请输入要修改的信息项,“.”提示输入:";
    						cout<<"1.姓名 2.性别 3.年龄 4.电话 5.邮箱 6.邮编 7.身份证号\n";
    						cout<<".";
    						cin>>i;
    						switch(i)
    						{
    						case 1:
    							{
    								cout<<"请输入学生姓名:\n";
    								cout<<".";
    								cin>>newtxt;
    								strcpy(head->getname(),newtxt);
    								queryRecord(number,number2);
    							}
    							break;
    						case 2:
    							{
    								cout<<"请输入学生性别:\n";
    								cout<<".";
    								cin>>newtxt;
    								strcpy(head->getsex(),newtxt);
    								queryRecord(number,number2);
    							}
    							break;
    						case 3:
    							{
    								cout<<"请输入学生年龄:\n";
    								cout<<".";
    								cin>>newnumber;
    								head->getage(newnumber);
    								queryRecord(number,number2);
    							}
    							break;
    						case 4:
    							{
    								cout<<"请输入学生新的电话:\n";
    								cout<<".";
    								cin>>newtxt;
    								strcpy(head->gettel(),newtxt);
    								queryRecord(number,number2);
    							}
    							break;
    						case 5:
    							{
    								cout<<"请输入学生新的邮箱:\n";
    								cout<<".";
    								cin>>newtxt;
    								strcpy(head->getemail(),newtxt);
    								queryRecord(number,number2);
    							}
    							break;
    						case 6:
    							{
    								cout<<"请输入学生新的邮编:\n";
    								cout<<".";
    								cin>>newtxt;
    								strcpy(head->getpostcode(),newtxt);
    								queryRecord(number,number2);
    							}
    							break;
    						case 7:
    							{
    								cout<<"请输入学生正确的身份证号:\n";
    								cout<<".";
    								cin>>newtxt;
    								strcpy(head->getIDnumber(),newtxt);
    								queryRecord(number,number2);
    							}
    							break;
    						default:
    							return false;
    						}
    						cout<<"是否继续修改(Y/N):";
    						cin>>flag;
    						if(strcmp(flag,"Y\0")==0)
    							continue;
    						else
    						{
    							return true;
    						}
    	
    					}
    					
    				}
    				else
    				{
    					head=head->getnext();
    					fhead=head;
    				}
    			}
    			cout<<"本校没有这样一个学生!"<<endl;
    			return false;
    	}
    	//删除记录
    	bool AddressBook::removeRecord()
    	{
    		int stuid,stufirstid;
    		person *head=myfirst;
    		person *fhead=head;
    		cout<<"请输入学生的学号前缀:";
    		cin>>stufirstid;
    		cout<<"请输入学生的学号尾号后4位:";
    		cin>>stuid;
    		if(head==NULL)
    		{
    			cout<<"错误!无学生可以删除!"<<endl;
    			return false;
    		}
    		else if(head->getfirstname()==stufirstid&&head->getNum()==stuid)
    		{
    			myfirst=myfirst->getnext();
    			cout<<"学号为"<<stufirstid<<stuid<<"的学生被删除成功!"<<endl;
    			delete head;
    			return true;
    		}
    		else
    		{
    			head=head->getnext();
    			while(head!=NULL)
    			{
    				if(head->getfirstname()==stufirstid&&head->getNum()==stuid)
    				{
    					fhead->setnext(head->getnext());
    					cout<<"学号为"<<stufirstid<<stuid<<"的学生已被删除\n";
    					delete head;
    					return true;
    				}
    				fhead=head;
    				head=head->getnext();
    			}
    			cout<<"要删除的学生不存在,无法删除!"<<endl;
    			return false;
    		}
    	}
    	//保存记录
    	void AddressBook::saveRecords()
    	{
    		ofstream fout("addressbook.txt");
    		person *pe=myfirst;
    		while(pe)
    		{
    			fout<<pe->getfirstname()<<"\t"<<pe->getNum()<<"\t"<<pe->getname()<<"\t"<<pe->getsex()<<"\t"<<pe->getage()<<"\t"<<pe->gettel()<<"\t"<<pe->getemail()<<"\t"<<pe->getpostcode()<<"\t"<<pe->getIDnumber()<<"\n";
    			pe=pe->getnext();
    		}
    		fout.close();
    		cout<<"数据保存完毕!\n";	
    	}
    	//读取记录
    	void AddressBook::loadRecords()
    	{
    		int Num,age,firstname;                //学号
    		char name[40],sex[10],tel[20],email[60],postcode[10],IDnumber[30];
    		ifstream fin("addressbook.txt");
    		int i=0;
    		while(fin>>firstname>>Num>>name>>sex>>age>>tel>>email>>postcode>>IDnumber)
    		{
    			insert(Num,firstname,name,sex,age,tel,email,postcode,IDnumber);
    			i++;
    		}
    		if(i==0)
    		{
    			cout<<"加载失败,目前文档内没有数据!"<<endl;
    			fin.close();
    		}
    		else
    		{
    			fin.close();
    			cout<<"已成功加载"<<i<<"行数据"<<endl;
    			displayRecord();
    		}
    		
    	}
    	
    
    	void main()
    	{
    		AddressBook target;
    		int i;
    		system("color e");
    		while(1)
    		{
    			cout<<"    =======================欢迎使用学生通讯录管理系统======================"<<endl;
    			cout<<"    请输入一个数字选择操作项,以.提示输入,以回车符号结束:                   "<<endl;
    			cout<<"    1.添加或新建学生的通讯联系方式信息。  addRecord()               无参数!"<<endl;
    			cout<<"    2.显示学生的通讯联系方式的记录。      displayRecord()           无参数!"<<endl;
    			cout<<"    3.修改一个学生的通讯联系方式信息。    update()                  无参数!"<<endl;
    			cout<<"    4.删除一个学生的通讯联系方式信息。    removeRecord()            无参数!"<<endl;
    			cout<<"    5.查询指定学生的通讯联系方式信息。    queryRecord()             无参数!"<<endl;
    			cout<<"    6.加载文件中学生通讯联系方式信息。    loadRecords()             无参数!"<<endl;
    			cout<<"    7.保存记录。                       saveRecords()             无参数!"<<endl;
    			cout<<"    8.清除所有记录。                    clear()                   无参数!"<<endl;
    			cout<<"    9.退出学生通讯录管理系统!            Exit()                    无参数!"<<endl;
    			cout<<"    ======================================================================="<<endl;
    			cout<<".";
    			cin>>i;
    			if(i<1||i>9)
    			{
    				cout<<"输入错误,请重新输入!"<<endl;
    				continue;
    			}
    			if(!(i==9||i==6||i==1)&&Enterflag==0)         // 如果第一次输入函数不是建立、打开或退出,则重新输入
    			{
    				cout<<"请先建立或者从文件载入一组联系方式信息!"<<endl;
    				continue;
    			}
    			Enterflag=1;
    			switch(i)
    			{
    			case 1: target.addRecord();
    				break;
    			case 2: target.displayRecord();
    				break;
    			case 3: target.update();
    				break;
    			case 4: target.removeRecord();
    				break;
    			case 5: target.queryRecord();
    				break;
    			case 6: target.loadRecords();
    				break;
    			case 7: target.saveRecords();
    				break;
    			case 8: target.clear();
    				break;
    			case 9:
    				exit(1);
    			}		
    		}
    	}
    
    展开全文
  • 学生通讯系统设计与实现 学生通讯系统信息包括:姓名、学号、性别、家庭住址、联系电话、等信息。现要求编写程序来完成如下功能: 1.学生通讯信息的输入 2.学生通讯信息的显示 3.学生通讯信息的统计 4.学生...
  • 学生通讯录管理系统实现文档附代码-c++课程设计
  • 摘 要:本课程设计设计一个实用的小型通讯录管理系统,用文件来存储学生的姓名、电话、QQ号码、邮编、地址等信息,完成对信息的添加、删除、查询、显示所有信息,退出及用双向链表来处理修改等操作。 在本课程设计中,...
  • 学生通讯录管理系统 程序设计课件 完整版 使用VC++编译而来
  • C++课程设计--学生通讯录管理系统

    热门讨论 2009-03-03 10:04:57
    这是我们C++学完后所做的课程设计--学生通讯录管理系统 另有教师信息、图书馆管理系统的C++源代码
  • 该课程设计的题目为学生通讯录管理系统
  • C语言课程设计---学生通讯录管理系统 完美程序+完整的报告
  • 学生通讯录管理系统 主要内容: 本系统可实现学生通讯录的信息管理,便于老师、同学进行管理、分析和使用。系统的主要功能如下: ①输入数据建立通讯录。建立通讯录系统,可以一次输入多个成员通讯录的信息,建立...
  • 学生通讯录管理系统设计与实现 设计要求 .1问题描述为什么要设计该系同设计该系统的现实意义 为什么要设计该系同设计该系统的现实意义 纸质的通讯录已经不能满足大家的要求容易丢失查找困难等问题是纸质通讯录所不...
  • 基于C++的学生通讯录管理系统,c++,课程设计
  • 学生通讯录管理系统设计与实现 问题描述 纸质的通讯录已经不能满足实际需求 容易丢失 查找困难等问题是纸质通讯录所不能克服的缺点学生通讯录管理系统是为了帮助老师同学或者其他一些需要使用的通讯录 的人员进行...
  • 数据结构课程设计报告 城市链表 学生通讯录管理系统
  • C 语言课程设计 最终答辩版 学生通讯录管理系统

    千次阅读 多人点赞 2014-07-22 23:20:31
    @课题设计学生通讯录管理系统 @设计时间:2014.2.24 @设计人: 2012级软件工程专业 刘 @设计题目:学生通讯录管理系统 @计算机配置:windows 7 旗舰版 32位操作系统 内存:4G CPU :i5--32
    <span style="font-family: Arial, Helvetica, sans-serif;">/*</span>
    ******************************************************************
       C语言的课程设计 现在开源  希望可以帮助到一些  测试文件没有附上 自己写一份就行  
       @课题设计:学生通讯录管理系统
       @设计时间:2014.2.24
       @设计人:  2012级软件工程专业 刘小洋
       @设计题目:学生通讯录管理系统
       @计算机配置:windows 7 旗舰版 32位操作系统 内存:4G CPU :i5--3210
       @运行环境:Microsoft Visual C++ 6.0
       @设计思路:建立8个子函数,分别用来添加、显示、删除、查询、修改、保存,读取和统计通讯录信息,完成通讯录的功能。
    			  主函数采用密码,保护了通讯录数据,可以调用8个子函数,分别完成添加记录、显示记录、删除记录、查询记录、
    			  修改记录、保存记录、读取记录、统计记录、退出系统等功能。在主函数中可以以1、2、3、4、5、6、7、8、9、10、0数字
    			  键分别可以执行某个功能模块。最后在对文件进行加密、解密功能。
       @扩展功能:利用system系统函数,实现对程序功能的扩展,为了方便用户和大众软件的设计方法,利用系统函数system调用windows
                  dos 命令实现对计算机的关机,重启,定时关机,注销等功能。
       @主要函数:int Menu_select()              系统用户登录后的菜单
                  int Input(Student stu[])       添加记录函数
                  int sum(Student stu[])         统计记录函数(男 女 总  人数)
                  void Display(Student stu[])    显示记录函数
    			  int Delete(Student stu[])      删除记录函数
    			  void Chick(Student stu[])      查找记录函数
    			  void Change(Student stu[])     修改记录函数
    			  void WritetoText(Student stu[]) 写入文件函数
    			  void Read(Student stu[])       读取文件函数
    			  void Menu()                     对应int Menu_select()函数的子菜单 他调用除主函数意外的所有函数
    			  void encfile(char *in_filename,char *pwd,char *out_file) 文件加密函数
    			  void unencfile(char *in_filename,char *pwd,char *out_file) 文件解密函数
    			  int  unpasswd()                解密函数
    			  int passwd()                   调用文件加密的函数
    			  int main()                     主函数设置密码功能 调用 Menu 函数
      @通讯录密码:用户名:lhy 密码 :201314
    ******************************************************************
    */
    //#include"stdafx.h"
    #include"stdio.h"
    #include<stdlib.h>
    #include<conio.h>
    #include<string.h> // 头文件
    static int n=0;    // 定义静态全局变量,存储已经读入记录的条数。
    void encfile(char *in_filename,char *pwd,char *out_file) ; //函数声明
    int passwd();                                              //函数声明
    int  unpasswd();                                           //函数声明
    void shut();                                               //函数声明,c语言关机的函数。
    //定义结构体用来存放学生的学号、姓名、性别、工作单位、电话号码、邮箱的信息。
    typedef struct
    	{
    		long  score;               /*学号*/
    		char name[10];             /*姓名*/
    		char sex[8];			   /*性别*/
    		char adds[20];			   /*工作单位*/
    		char num[15];              /*电话号码*/
    		char email[20];			   /*邮箱*/
    	}Student;
    Student T[100];
    /*
    主菜单 利用 do while、printf简单实现 调用系统函数显示当前系统的时间和日期。
    这个函数主要供void Mean函数调用。
    */
    int Menu_Select()
    	{
    		char c;
    		do{
    		system("cls");    //清屏
    		system("date /T");//显示系统当前日期
    		system("time /T");//显示系统当前时间
    		system("color 0a");//改变控制台前景,背景颜色
    		printf("\t\t\t***学生通讯录***** \n");
    		printf("\t\t\t******************\n");
    		printf("\t\t\t* 1. 添加记录  *\n");
    		printf("\t\t\t* 2. 显示记录  *\n");
    		printf("\t\t\t* 3. 删除记录  *\n");
    		printf("\t\t\t* 4. 查询记录  *\n");
    		printf("\t\t\t* 5. 修改记录  *\n");
    		printf("\t\t\t* 6. 保存记录  *\n");
    		printf("\t\t\t* 7. 读取记录  *\n");
    		printf("\t\t\t* 8. 统计记录  *\n");
    		printf("\t\t\t* 9. 文件解密  *\n");
    		printf("\t\t\t* *. 其他功能  *\n");
    		printf("\t\t\t* 0. 退出程序  *\n");
    		printf("\t\t\t*****************\n");
    		printf("\t\t\t请您选择(0-9)选择 其他功能 请输入':':");
    		c=getchar();
    		}while(c<'0'||c>'10');
    		return(c-'0');
    	}
    
    /*
    添加记录功能函数,利用scanf 重复对结构体每一个要输入的学生信息添加,
    最后输入Y N 是否要继续添加记录 利用 while对输入的内容比较。
    这里需要的注意的是  
    ** 如果已经有文件读入,对n+i是对当前文件的下一条进行添加。
    */
    int Input(Student stu[])
    {
        int i=0;
        char sign;
    	while(sign!='n'&&sign!='N')
    	{
    		printf("\t学号:");
    		scanf("\t%d",&stu[n+i].score);
    		printf("\t姓名:");
    		scanf("\t%s",stu[n+i].name);
    		printf("\t性别:");
    		scanf("\t%s",stu[n+i].sex);
    		printf("\t电话号码:");
    		scanf("\t%s",stu[n+i].num);
    		printf("\t工作地址:");
    		scanf("\t%s",stu[n+i].adds);
    		printf("\t电子邮箱:");
    		scanf("\t%s",stu[n+i].email);
    		printf("\n\t是否继续添加?(Y/N)");
    		scanf("\t%c",&sign);
    		i++;
    	}
    	return(n+i);
    }
    /*
    统计通讯录总人数,其中包括男生、女生人数各个总人数。
    利用strcmp函数进行比较得出男生人数,自然女生人数就出来了。
    */
    int sum(Student stu[])
    {
    	int a=0,b=0,i;
    	for(i=0;i<n;i++)
    	{
    		if(strcmp(stu[i].sex,"男")==0) //比较函数
    		a++;
    	}
    	b=i-a;
    	printf("\t\t通讯录总人数为%d个,\n\t\t    其中男孩有%d个。\n",i,a);
    	printf("\t\t    其中女孩有%d个。\n",b);
    		return(n);
    		system("pause");
    }
    /*
    通讯录的显示函数。for循环和printf依次对结构体输出。
    */
    void Display(Student stu[])
    {
    	int i;
    	printf("------------------------------------------------------------------------------\n");  //显示的格式
    	printf("学号           姓名   性别  电话号码     工作单位        电子邮箱\n");
    	printf("------------------------------------------------------------------------------\n");
    	for(i=1;i<n+1;i++)
    		printf("%-14d%-8s%-6s%-13s%-15s%-15s\n",stu[i-1].score,stu[i-1].name,stu[i-1].sex,stu[i-1].num,stu[i-1].adds,stu[i-1].email);
    	           //-14d%  -表示左对齐 14 表示十四个字节的位置 不足用空格补齐
        printf("----------------------------------------------------------------------\n");
    	system("pause"); //系统函数停止。
    }
     /*
    删除学生通讯录的记录函数,这里利用学号作为索引,利用strcmp 函数比对
    操作完成之后有对删除是否成功进行判断
    
    **原理:被删除记录的后一条记录覆盖当前记录的原理。
    */
    int Delete(Student stu[])
    {
    	int i=0,j;
    	long m;
    	printf("\t请输入想删除记录中的学号:");
    	scanf("%d",&m);
    	while(stu[i].score!=m&&i<n)i++;
    	if(i==n)
    	{
    		printf("\t通讯录中没有此人!\n");
    
    	}
    	else
    	{
    	for(j=i;j<n-1;j++)//后一条记录覆盖前一条记录
    	{
    		strcpy(stu[j].num,stu[j+1].num);
    		strcpy(stu[j].name,stu[j+1].name);
    		strcpy(stu[j].sex,stu[j+1].sex);
    		strcpy(stu[j].adds,stu[j+1].adds);
    		strcpy(stu[j].email,stu[j+1].email);
    		stu[j].score=stu[j+1].score;
    	}
    	printf("\t\t\t已经成功删除!\n");
    	n=n-1;
    	}
    	return (n);
    }
     /*
    查询通讯录,三种查询方式的原理相同,都是利用while循环遍历每一条结构体
    利用strcmp进行比对,如果有跟所查询的信息匹配的对象,利用循环变量记录当前位置
    然后printf输出此时位置所对应的信息
    **这里要对人物的名字进行特殊处理,因为我们生活中不排除有两个名字一样的人。
    */
    void Chick(Student stu[])
    {
    
    	int m;
        printf("\t\n请选择查询方式:\n");        //printf输出查询格式
        printf("\t**************************************\n");//格式:
        printf("\t**1---姓名查询(不建议用这种方式查询)**\n");
        printf("\t**2--电话查询(建议使用)             **\n");
        printf("\t**3--地址查询                       **\n");
        printf("\t**************************************\n");
        printf("请选择:");
        scanf("%d",&m);
        while(m!=1&&m!=2&&m!=3)
        {
    		printf("输入错误,请重新选择:");
    		scanf("%d",&m);
    	}
    
    	if(m==1)                                  //此处对名字进行特殊处理
    	{
    		char s[20];
    		int i=0;
    		printf("\t请输入想查询的姓名:");
    		scanf("\t%s",s);
       loop:while(strcmp(stu[i].name,s)!=0&&i<n )
    		{	                                   //名字如果有重复的也照常输出
    	    	i++;
    		}
    	   	if(i==n)
    		{
    			printf("\t通讯录中没有此人!\n");
    			return;
    		}
    		else
    		{
    			printf("\t学生学号: %d\n",stu[i].score);
    			printf("\t学生性别: %s\n",stu[i].sex);
    			printf("\t电话号码: %s\n",stu[i].num);
    			printf("\t工作地址: %s\n",stu[i].adds);
    			printf("\t电子邮箱: %s\n",stu[i].email);
    		}
    			if(i<n-1)                              //运用 goto 语句实现对人名重复的人全部输出。
    			{
    				i++;
    				goto loop;
    			}
    
    	} ;
    
         if(m==2)//用电话作为索引查询
    	 {
    		char s[20];
    		int i=0;
            printf("\t请输入想查询的电话:");
    		scanf("\t%s",s);
            while(strcmp(stu[i].num,s)!=0&&i<n) i++;
            if(i==n)
    		{
    			printf("\t通讯录中没有此人!\n");
    			return;
    
    		}
    		printf("\t学生学号: %d\n",stu[i].score);
    		printf("\t学生姓名: %s\n",stu[i].name);
    		printf("\t学生性别: %s\n",stu[i].sex);
    		printf("\t工作地址: %s\n",stu[i].adds);
    		printf("\t电子邮箱: %s\n",stu[i].email);
    	 } ;
    
    	if(m==3)//用地址作为索引查询
    	{
    		char s[20];
    		int i=0;
    		printf("\t请输入想查询的地址:");
    		scanf("\t%s",s);
    		while(strcmp(stu[i].adds,s)!=0&&i<n) i++;
    		if(i==n)
    		{
    			printf("\t通讯录中没有此人!\n");
    			return;
    		}
    		printf("\t学生学号: %d\n",stu[i].score);
    		printf("\t学生姓名: %s\n",stu[i].name);
    		printf("\t学生性别: %s\n",stu[i].sex);
    		printf("\t电话号码: %s\n",stu[i].num);
    		printf("\t电子邮箱: %s\n",stu[i].email);
    	} ;
    }
    
     /*
    修改通讯录,这里利用学号作为索引信息。如果通讯录中没有此人,则返回一条信息。
    **这里学号作为索引信息,用long 长整型。
    */
    void Change(Student stu[])
    {
    	int i=0;
    	long m;
    	printf("\t请输入想修改的记录中人的学号:");
    	scanf("%d",&m);
        while(stu[i].score!=m&&i<n)
    	i++;
    	if(i==n)
    	{
    		printf("\t通讯录中没有此人!\n");
    		return;
    	}
    		printf("\t学号:");
    		scanf("\t%d",&stu[i].score);
    		printf("\t姓名:");
    		scanf("\t%s",stu[i].name);
    		printf("\t性别:");
    		scanf("\t%s",stu[i].sex);
    		printf("\t电话号码:");
    		scanf("\t%s",stu[i].num);
    		printf("\t工作地址:");
    		scanf("\t%s",stu[i].adds);
    		printf("\t电子邮箱:");
    		scanf("\t%s",stu[i].email);
    		printf("\t修改成功!");
    }
    /*
    写入文件函数。fopen fclose 打开关闭文件 'W'进行些操作。详见谭浩强C 语言第十章。
    若打不开文件,则执行system系统函数退出。
    */
    void WritetoText(Student stu[])
    {
    	int i=0;
    	FILE *fp;                                           /*定义文件指针*/
    	char filename[20];                                  /*定义文件名*/
    	printf("\t保存到文件\n");                           /*输入文件名*/
    	printf("\t请输入所保存的文件名:");
    	scanf("\t%s",filename);
    	if((fp=fopen(filename,"w"))==NULL)
    	{
    		printf("\t无法打开文件\n");
    		system("pause");
    		return;
    	}
    	while(i<n)
    	{
    		fprintf(fp,"%-13d%-6s\t%-3s\t%-13s\t%-20s\t%-20s\n",stu[i].score,stu[i].name,stu[i].sex,stu[i].num,stu[i].adds,stu[i].email);
    		i++;
    	}
    	fclose(fp);                                         /*关闭文件*/
    	printf("保存成功!\n");
    }
    /*
    读取文件,这里不会上网找的。
    */
    void Read(Student stu[])
    {
      FILE *fp;
      int i;
      char filename[20];
      printf("输入要读入的文件名:");
      scanf("\t%s",filename);
      if((fp=fopen(filename,"r"))==NULL)
        {
           printf("找不到%s文件!\n",filename);
           system("pause");
           exit(0);
        }
       n=0;
     // fseek(fp,0L,SEEK_SET);      //设置偏移量 SEEK_SET: 文件开头  数值为0 ;意思为:把文件内部指针移动到离文件开头0 字节处;0L:表示离文件开头多少个字节。
       for(i=0;i<100&&!feof(fp);i++) //这里的100 是前面已经说明了 最多可以存100条记录
        {
           fscanf(fp,"%d %s %s %s %s %s\n",&stu[i].score,stu[i].name,stu[i].sex,stu[i].num,stu[i].adds,stu[i].email);
           n++;
        }
     fclose(fp);
     printf("读取成功,文件%s中的所有信息已经读入!\n",filename);
    }
    
    void Menu()
    {
    		for(;;) //让这里程序循环,否则就退出程序了。
    	{
    		switch(Menu_Select())
    		{
    		case 1:
    		printf("\n\t添加记录到通讯录\n");                         /*添加记录*/
    		n=Input(T);
    		break;
    
    		case 2:
    		printf("\n\t\t\t    通讯录记录表\n");                      /*显示记录*/
    		Display(T);
    		break;
    
    		case 3:
    		printf("\n\t从通讯录中删除记录\n");
    		n=Delete(T);								                  /*删除记录*/
    		printf("\t");
    		system("pause");										     /*按任意键继续*/
    		break;
    
    		case 4:
         	printf("\n\t在通讯录中查找记录\n");
    		Chick(T);									                   /*查找记录*/
    		printf("\t");
    		system("pause");
    		break;
    
    		case 5:
    		printf("\n\t修改通讯录中的记录\n");
    		Change(T);										            	 /*修改数据*/
    		printf("\t");
    		system("pause");
    		break;
    
    		case 6:
    		printf("\n\t保存功能\n");
    		WritetoText(T);	                                                 /*保存数据*/
    	    passwd();
    		printf("\t");
    		system("pause");
    		break;
    
    		case 7:
    		printf("\n\t读取功能\n");
    		Read(T);									                          /*读取数据*/
    		printf("\t");
    		system("pause");
    		break;
    
    		case 8:
    		printf("\n\t****学生通讯录统计人数****\n\n");                          /*统计记录*/
    		sum(T);
    		system("pause");
    		break;
    
    		case 9:
    		printf("\n\t****对学生文件进行解密处理****\n\n");                      /*解密处理*/
    		unpasswd();
    		system("pause");
    		break;
    
    		case 10:  //用C语言实现对计算机的开机 关机 重启  定时关机               /*其他功能*/
    		shut();
    		system("pause");
    		break;
    
    		case 0:
    		printf("\n\t\t\t欢迎您再次使用本程序!\n");                             /*结束程序*/
    		printf("\n\t\t本程序只适合个人娱乐沟通使用,谢绝商业用途。\n");
    		printf("\n\t\t\n");
    		system("pause");
    		exit(0);
    		}
    	}
    }
    
    
    /*
      加密函数:利用异或运算的特点对文件进行的加密,
      一个数跟同一个数异或两次,数值本身不变。利用这个原理我们可以先对文件的所有字节进行一次异或,
      然后解密就是将加密文件的所有字节与上次加密异或相同的字符或字符串,以达到加密解密的目的。
      ** 黑马程序员 教学视频里面提到过。
    */
    void encfile(char *in_filename,char *pwd,char *out_filename)                //加密函数
    {
    	FILE *fp1,*fp2;
        char ch;
    	int j=0;
    	int j0=0;
    	fp1=fopen(in_filename,"rb");
    	if(fp1==NULL)
    	{
    		printf("cannot open in-file.\n");
    		exit(1);                                                               //退出
    	}
    	fp2=fopen(out_filename,"wb");
    	if(fp2==NULL)
    	{
    		printf("cannot open or create out-file.\n");
    		exit(1);                                                                //退出
    	}
    	while(pwd[++j0]);                                     //计算秘钥长度
    	ch=fgetc(fp1);                                       //读取文件的每一个字节
    	/*加密算法开始*/
    	while(!feof(fp1))
    	{
    		fputc(ch^pwd[j>=j0?j=0:j++],fp2);                 /*异或后写入fp2文件*/
    		ch=fgetc(fp1);                                    //读取文件的全部字节
    	}
    	printf("恭喜文件加密成功!\n");
    	printf("请牢记您的密码!\n");
    	fclose(fp1);/*关闭源文件*/
    	fclose(fp2);/*关闭目标文件*/
    }
    /*
      这个函数主要是对上面加密函数的调用,注意的问题是当输入一个以上字符串是用 fflush(stdin)函数清理当前缓存。
    */
    int  passwd()//加密调用函数
    {
    	char in_filename[30];  /*用户输入的要加密的文件名*/
    	char out_filename[30]; /*用户输入加密后保存的文件名*/
    	char pwd[8];           /*用来保存密码*/
    /*	printf("\t为了安全起见,这里要对文件做加密处理:\n");    //反复调试还是没有通过。。。。。
    	printf("\t请输入要加密文件的名字:");
    	scanf("\t s%",in_filename);
    	fflush(stdin);
    	printf("\t请输入加密后的文件名:");
    	scanf("\t s%",out_filename);
    	fflush(stdin);
    	printf("\t 请输入密码(不超过8位):");
    	scanf("\t s%",pwd);
    	fflush(stdin);
    */
       printf("\t为了安全起见,这里要对文件做加密处理:\n");//错误处理:这里反复调试了很多次了 结果就是没有用 fflush(stdin) 清空缓存。
       printf("\t\n请输入需要加密文件的名字:\n");
       fflush(stdin);              //清空缓存   切记 
       gets(in_filename);         //获取要加密的文件名
       printf("\t\n请输入加密的密码:\n");
       gets(pwd);                 //获取密码
       printf("\t\n请输入加密后文件的名字\n");
       gets(out_filename);         //加密后的文件名
       encfile(in_filename,pwd,out_filename);
       return 0;
    }
    
    void unencfile(char *in_filename,char *pwd,char *out_filename) //解密函数
    {
    	FILE *fp1,*fp2;
        char ch;
    	int j=0;
    	int j0=0;
    	fp1=fopen(in_filename,"rb");
    	if(fp1==NULL)
    	{
    		printf("cannot open in-file.\n");
    		exit(1);      //退出
    	}
    	fp2=fopen(out_filename,"wb");
    	if(fp2==NULL)
    	{
    		printf("cannot open or create out-file.\n");
    		exit(1);      //退出
    	}
    	while(pwd[++j0]); //计算秘钥长度
    	ch=fgetc(fp1);    //读取文件的每一个字节
    	/*加密算法开始*/
    	while(!feof(fp1))
    	{
    		fputc(ch^pwd[j>=j0?j=0:j++],fp2);        /*异或后写入fp2文件*/
    		ch=fgetc(fp1);                          //读取文件的全部字节
    	}
    	printf("恭喜文件解密成功!\n");
    	printf("现在你可以对文件进行修改了!\n");
    	fclose(fp1);/*关闭源文件*/
    	fclose(fp2);/*关闭目标文件*/
    }
    
    int  unpasswd()//解密调用函数
    {
    	char in_filename[30];  /*用户输入的要解密的文件名*/
    	char out_filename[30]; /*用户输入解密后保存的文件名*/
    	char pwd[8];           /*用来保存密码*/
    /*	printf("\t为了安全起见,这里要对文件做解密处理:\n");
    	printf("\t请输入要解密文件的名字:");
    	scanf("\t s%",in_filename);
    	fflush(stdin);
    	printf("\t请输入解密后的文件名:");
    	scanf("\t s%",out_filename);
    	fflush(stdin);
    	printf("\t 请输入密码:");
    	scanf("\t s%",pwd);
    	fflush(stdin);
    */
       printf("\t\n请输入需要解密文件的名字:\n");
       fflush(stdin);
       gets(in_filename);         //获取要加密的文件名
       printf("\t\n请输入密码:\n");
       gets(pwd);                 //获取密码
       printf("\t\n请输入解密后文件的名字\n");
       gets(out_filename);         //加密后的文件名
       unencfile(in_filename,pwd,out_filename);
       return 0;
    }
    /*
      C语言的关机程序,主要调用windows DOS 系统下的system 函数
     */
    int print()
    {
        printf(" ╪╪╪╪╪╪╧╧╧╧╧╧╧╧╪╪╪╪╪╪\n");
        printf("╔═══╧╧C语言关机程序 ╧╧═══╗\n");
        printf("║******本程序有刘洪阳制作*******\n");
        printf("║**********计算机学院***********\n");
        printf("║*******************************\n");
        printf("║※1.实现10分钟内的定时关闭计算机║\n");
        printf("║※2.立即关闭计算机              ║\n");
        printf("║※3.注销计算机                 ║\n");
        printf("║※4.重启计算机                 ║\n");
        printf("║※0.退出系统                   ║\n");
        printf("╚════════════════╝\n");
        return 0;
    }
    void shut()
    {
    	char cmd[20]="shutdown -s -t ";
    	int c;
        char t[5]="0";
        system("title C语言关机程序        作者:刘小洋");//设置cmd窗口标题
        system("mode con cols=45 lines=25");//窗口宽度高度
        system("color 0B");
        system("date /T");
        system("TIME /T");
        print();
        scanf("%d",&c);
        getchar();
        switch(c)
       {
        case 1:printf("您想在多少秒后自动关闭计算机?(0~600)\n");scanf("%s",t);system(strcat(cmd,t));break;
        case 2:system("shutdown -p");break;
        case 3:system("shutdown -l");break;
        case 4:system("shutdown -r");break;
        case 0:break;
        default:printf("Error!\n");
       }
        system("pause");
        exit(0);
    }
    
    /*
    主函数,通过for循环和strcmp函数实现密码功能,登陆成功后可以调用Menu函数。
    我们定义的Menu函数主要是利用switch语句对数据进行处理,switch语句相应的字句按各自的内容
    调用前面已经写好的相应的函数。
    */
    int main()
    {
    	int flag1;
        char name[20]="lhy";
        char person[20];
    	char ch[7];
    	int i,n;
    	system("title   通讯录管理系统   作者:刘洪阳");//控制台标题修改
    	system("date /T");   //显示系统当前日期
    	system("time /T");	//显示系统时间
    	system("color 0b");//修改控制台前景,背景颜色
        
       //设置的控制台输出的格式  
    	printf ("\t\t **********通讯录管理系统!**********\n\n");
    	printf ("\t\t\t\t用 户 登 录 \n\n");
        printf("\t\t\t\t username:");
        gets(person);
        flag1=strcmp(person,name);
        printf("\t\t\t\t password:");
        
    	for(i=0;i<3;i++)
    	{
    		for(n=0;n<6;n++)
    		{
    			ch[n] = getch();
    			printf("*");
    		}
    		printf("\n");
    		ch[n] = '\0';
    		if(0 == strcmp(ch,"201314"))
    		{
    			printf("\t\t\t\t管理员你好,欢迎你进入本系统!\n");
    			getch();
    			Menu();
    			break;
    		}
            else
            {
                printf("密码错误,请重新输入\n");
            }
    	}
    	if(i==3)
        {
            printf("你输入的错误的密码次数达到上限,系统自动退出!请联系管理员!");
            exit(1);
        }
       /*     gets(password1);
            flag2=strcmp(password,password1);
            if(flag1==0 && flag2==0)             //密码验证
    		{
                printf("\t\t\t\t Welcome !\n\t\t\t\t Press any key to enter the menu!\n");//格式
    			getch();
                Menu();
                break;
    		}
            else
    		{
                printf ("\t\t\t      Your username or password is wrong!\n\t\t\t\t Please input again!\n");
    			printf ("\t\t\t      pay attention you will hava %d  chance!         \n\n",4-h);
                h++;
    		}
    	}
       	if (h=5)                               //错误提示次数
    	    printf ("对不起,您输入的用户名或密码有误,已被强制退出。\n");
    	    */
    	return 0;
    }
    

    展开全文
  • 对刚上完C++的同学做课程设计时有一定帮肋,里面包括源程序和一个word报告以及有关文件。相信你一定会喜欢的……
  • 是一次课程设计的c源代码,功能如下: 1、通讯录的每一条信息包括学号、姓名、电话(字符数组)。 2、输入功能:可以一次完成若干条信息的输入。 3、显示功能:完成全部通讯录信息的显示。 4、查找功能:完成按姓名...
  • C语言程序设计实训 总结报告【学生通讯录管理系统

    目录

    说明

    1、实训目的

    2、实训内容

    3、系统需求分析

    4、系统设计与实现

    完整程序代码(纯C语言 代码)

    5、系统测试与运行结果分析

    6、心得体会

    原创性声明


    说明

    大一下学期(2019年 上半年),开学第一周,C语言实训作业!展示作品!

    2019 125日至 20193 1 日          C语言程序设计实训 总结报告

    1、实训目的

    C语言程序设计实训》是移动软件专业的主要实践性教学环节。通过本课程的实训,使学生在完成有关专业基础课学习的基础上,能够综合运用所学相关知识,并基于学生个人的创新创意,设计并实现相应的程序;使学生初步掌握程序设计的基本方法、初步具备运用程序设计解决实际问题的能力、初步具备进行工程设计的基本技能及分析能力,为毕业设计和以后的工程实践打下良好的基础。

    2、实训内容

    设计并实现一个学生通讯录管理系统。

    3、系统需求分析

    系统需求:用结构数组实现通讯录管理。

    首先用switch分支结构,进行循环。

    其次,用文件来存储学生信息。

    然后,用函数实现不同的功能。例如:1.创建通讯录、2.显示通讯录、3.查询通讯录、4.修改通讯录、5.添加通讯录、6.删除通讯录、7.排序通讯录、8.退出等。

    4、系统设计与实现

    在C++环境下 ,编译运行,需要 添加 头文件 #include <cstdlib>

    C++ 中error: ‘exit’ was not declared in this scope 的解决方法:添加头文件#include <cstdlib>

    完整程序代码(纯C语言 代码

    #include <stdio.h>
    #include <string.h>
    
    #define N 108
    
    typedef struct telephone
    {
        char name[25];
        char num[25];
        char tel[25];
    } TEL;
    
    void DisplayMenu(); //显示主菜单
    void save(TEL a[], int n);
    void CreateList(TEL a[], int n);      //1.创建通讯录
    void DisplayList(TEL a[], int n);     //2.显示通讯录
    void InquireListName(TEL a[], int n); //3.按姓名查询通讯录
    void InquireListNum(TEL a[], int n);  //4.按学号查询通讯录
    void ChangeListName(TEL a[], int n);  //5.按姓名修改通讯录
    void ChangeListNum(TEL a[], int n);   //6.按学号修改通讯录
    int DelListName(TEL a[], int n);      //7.按姓名删除通讯录
    int DelListNum(TEL a[], int n);       //8.按学号删除通讯录
    void UpSortListName(TEL a[], int n);  //9.姓名升序排序通讯录
    void DownSortListNum(TEL a[], int n); //10.学号逆序排序通讯录
    int AddList(TEL a[], int n);          //11.添加学生信息
    
    int main()
    {
        struct telephone a[N];
        int i, n;
        FILE *fp;
    
        if ((fp = fopen("stu.dat", "r")) != NULL) //如果文件stu.dat已存在
        { // 则把数据从文件加载到数组a(读入记录个数n和n个姓名、学号、电话号码)
            fscanf(fp, "%d", &n);
            for (i = 0; i < n; i++)
                fscanf(fp, "%s%s%s", a[i].name, a[i].num, a[i].tel);
        }
        else
        {
            printf("第一次使用该系统,请输入n和n个姓名、学号、电话号码:\n");
            scanf("%d", &n);
            for (i = 0; i < n; i++)
                scanf("%s%s%s", a[i].name, a[i].num, a[i].tel);
            save(a, n);
        }
    
        DisplayMenu(); //显示主菜单
        while (1)
        {
            char select;
            char name[25];
            scanf(" %c", &select);
    
            if (select < 'a' || select > 'l')
            {
                printf("输入错误!\n");
                continue;
            }
            //if( select=='l' )
            //    break;
    
            switch (select)
            {
            case 'a':
                DisplayMenu(); //显示主菜单
                break;
            case 'b':
                DisplayList(a, n); //2.显示通讯录
                break;
            case 'c':
                InquireListName(a, n); //3.按姓名查询通讯录
                break;
            case 'd':
                InquireListNum(a, n); //4.按学号查询通讯录
                break;
            case 'e':
                ChangeListName(a, n); //5.按姓名修改通讯录
                break;
            case 'f':
                ChangeListNum(a, n); //6.按学号修改通讯录
                break;
            case 'g':
                if (DelListName(a, n)) //7.按姓名删除通讯录
                    n--;
                break;
            case 'h':
                if (DelListNum(a, n)) //8.按学号删除通讯录
                    n--;
                break;
            case 'i':
                UpSortListName(a, n); //9.姓名升序排序通讯录
                break;
            case 'j':
                DownSortListNum(a, n); //10.学号逆序排序通讯录
                break;
            case 'k':
                if (AddList(a, n)) //11.添加学生信息
                    n++;
                save(a, n);
                break;
            case 'l':
                exit(0); //12.退出系统
                break;
            }
        }
        return 0;
    }
    
    void save(TEL a[], int n)
    {
        int i;
        FILE *fp;
        fp = fopen("stu.dat", "w");
        fprintf(fp, "%d\n", n);
        for (i = 0; i < n; i++)
            fprintf(fp, "%s\t%s\t%s\n", a[i].name, a[i].num, a[i].tel);
    }
    
    void DisplayMenu() //1.显示主菜单
    {
        printf("                      学生通讯录管理系统\n\n");
        printf("*************************系统功能菜单**************************\n");
        printf(" -------------------------------------------------------------\n");
        printf("   a.显示主菜单                       b.显示通讯录\n");
        printf("************************************************************\n");
        printf("   c.按姓名查询通讯录                 d.按学号查询通讯录\n");
        printf("************************************************************\n");
        printf("   e.按姓名修改通讯录                 f.按学号修改通讯录\n");
        printf("************************************************************\n");
        printf("   g.按姓名删除通讯录                 h.按学号删除通讯录\n");
        printf("************************************************************\n");
        printf("   i.姓名升序排序通讯录               j.学号逆序排序通讯录\n");
        printf("************************************************************\n");
        printf("   k.添加学生信息                     l.退出系统\n");
        printf(" -------------------------------------------------------------\n");
        printf("***************************************************************\n\n");
        printf("请选择您需要的操作:\n");
    }
    
    void DisplayList(TEL a[], int n) //2.显示通讯录
    {
        int i;
        printf("显示通讯录:\n");
        for (i = 0; i < n; i++)
            printf("%s\t%s\t%s\n", a[i].name, a[i].num, a[i].tel);
        printf("\n");
    }
    
    void InquireListName(TEL a[], int n) //3.按姓名查询通讯录
    {
        int i, flag;
        char SearchName[25];
        printf("按姓名查询通讯录:\n");
        scanf("%s", SearchName);
        for (i = 0, flag = 0; i < n; i++)
        {
            if (strcmp(SearchName, a[i].name) == 0)
            {
                printf("%s\t", a[i].name);
                printf("%s\t", a[i].num);
                printf("%s\n", a[i].tel);
                flag = 1;
                break;
            }
        }
        if (flag == 0)
        {
            printf("未查询到该姓名信息!\n");
        }
        printf("\n");
    }
    
    void InquireListNum(TEL a[], int n) //4.按学号查询通讯录
    {
        int i, flag;
        char SearchID[25];
        printf("按学号查询通讯录:\n");
        scanf("%s", SearchID);
        for (i = 0, flag = 0; i < n; i++)
        {
            if (strcmp(SearchID, a[i].num) == 0)
            {
                printf("%s\t", a[i].name);
                printf("%s\t", a[i].num);
                printf("%s\n", a[i].tel);
                flag = 1;
                break;
            }
        }
        if (flag == 0)
        {
            printf("未查询到该学号信息!\n");
        }
        printf("\n");
    }
    
    void ChangeListName(TEL a[], int n) //5.按姓名修改通讯录
    {
        int i, flag;
        char SearchName[25];
        printf("按姓名修改通讯录:\n");
        scanf("%s", SearchName);
        for (i = 0, flag = 0; i < n; i++)
        {
            if (strcmp(SearchName, a[i].name) == 0)
            {
                strcpy(a[i].name, SearchName);
                printf("请输入要修改的学号:");
                scanf("%s", a[i].num);
                printf("请输入要修改的电话号码:");
                scanf("%s", a[i].tel);
                //strcpy(p[i].name,ChangeName);
                //strcpy(p[i].name,ChangeTel);
                save(a, n);
                printf("信息修改完毕!\n");
                printf("%s\t%s\t%s\n", a[i].name, a[i].num, a[i].tel);
                flag = 1;
                break;
            }
        }
        if (flag == 0)
            printf("未找到该姓名信息!");
        printf("\n");
    }
    
    void ChangeListNum(TEL a[], int n) //6.按学号修改通讯录
    {
        int i, flag;
        char SearchNum[25];
        printf("按学号修改通讯录:\n");
        scanf("%s", SearchNum);
        for (i = 0, flag = 0; i < n; i++)
        {
            if (strcmp(SearchNum, a[i].num) == 0)
            {
                strcpy(a[i].num, SearchNum);
                printf("请输入要修改的名字:");
                scanf("%s", a[i].name);
                printf("请输入要修改的电话号码:");
                scanf("%s", a[i].tel);
                //strcpy(p[i].name,ChangeName);
                //strcpy(p[i].name,ChangeTel);
                save(a, n);
                printf("信息修改完毕!\n");
                printf("%s\t%s\t%s\n", a[i].name, a[i].num, a[i].tel);
                flag = 1;
                break;
            }
        }
        if (flag == 0)
            printf("未找到该学号信息!");
        printf("\n");
    }
    
    int DelListName(TEL a[], int n) //7.按姓名删除通讯录
    {
        int i, j;
        char SearchName[25];
        printf("按姓名删除通讯录:\n");
        scanf("%s", SearchName);
        for (i = 0; i < n; i++)
        {
            if (strcmp(a[i].name, SearchName) == 0)
                break;
        }
        if (i >= n)
        {
            printf("未查询到该姓名信息!按姓名删除通讯录失败!\n");
            return 0;
        }
        else
        {
            for (j = i; j < n - 1; j++)
                a[j] = a[j + 1];
            save(a, n);
            printf("按姓名删除通讯录成功!\n");
            return 1;
        }
    }
    
    int DelListNum(TEL a[], int n) //8.按学号删除通讯录
    {
        int i, j, flag;
        char SearchNum[25];
        printf("按学号删除通讯录:\n");
        scanf("%s", SearchNum);
        for (i = 0; i < n; i++)
        {
            if (strcmp(a[i].num, SearchNum) == 0)
                break;
        }
        if (i >= n)
        {
            printf("未查询到该学号信息!按学号删除通讯录失败!\n");
            return 0;
        }
        else
        {
            for (j = i; j < n - 1; j++)
                a[j] = a[j + 1];
            printf("按学号删除通讯录成功!\n");
            save(a, n);
            return 1;
        }
        printf("\n");
    }
    
    void UpSortListName(TEL a[], int n) //9.姓名升序排序通讯录
    {
        int i, j;
        TEL temp;
        for (i = 0; i < n; i++)
        {
            for (j = i + 1; j < n; j++)
            {
                if (strcmp(a[i].name, a[j].name) > 0)
                {
                    temp = a[i];
                    a[i] = a[j];
                    a[j] = temp;
                }
            }
        }
        printf("姓名升序排序通讯录:\n");
        for (i = 0; i < n; i++)
            printf("%s\t%s\t%s\n", a[i].name, a[i].num, a[i].tel);
        printf("\n");
    }
    
    void DownSortListNum(TEL a[], int n) //10.学号逆序排序通讯录
    {
        int i, j;
        TEL temp;
        for (i = 0; i < n; i++)
        {
            for (j = i + 1; j < n; j++)
            {
                if (strcmp(a[i].num, a[j].num) > 0)
                {
                    temp = a[i];
                    a[i] = a[j];
                    a[j] = temp;
                }
            }
        }
        printf("学号逆序排序通讯录:\n");
        for (i = n - 1; i >= 0; i--)
            printf("%s\t%s\t%s\n", a[i].name, a[i].num, a[i].tel);
        printf("\n");
    }
    
    int AddList(TEL a[], int n) //11.添加学生信息
    {
        int i, flag;
        char AddNum[25];
        printf("添加通讯录:\n");
        printf("请输入要添加的学号:");
        scanf("%s", AddNum);
        for (i = 0, flag = 0; i < n; i++)
        {
            if (strcmp(AddNum, a[i].num) == 0)
            {
                flag = 1;
                printf("学号重复!\n");
                return 0;
            }
        }
        if (flag == 0)
        {
            //n++;
            printf("学号不重复!请添加信息:\n");
            printf("请输入要添加的名字:");
            scanf("%s", a[n].name);
            strcpy(a[n].num, AddNum);
            printf("请输入要添加的电话号码:");
            scanf("%s", a[n].tel);
            //save(a,n);
            printf("添加信息成功!\n");
            return 1;
            //printf("%d",n);
        }
        printf("\n");
    }

    5、系统测试与运行结果分析

    涉及“文件操作”!

    程序运行无误。本程序容错能力较强,有很强的错误查找能力。本程序各个小函数的联系性并不强,容易修改与改善。

    运行结果无误。无论是“修改通讯录”还是“添加通讯录、删除通讯录”本程序都能够正确执行,并保存到文件之中,非常方便。 “删除通讯录”中“按姓名删除通讯录”与“按学号删除通讯录”分为两个函数,这使得“删除函数”更为简单、清晰,同时使得整个程序更为简单、优化。

     

    6、心得体会

    此次实训,收获甚多,受益匪浅。“学生通讯录管理系统”用到的知识很多,函数、结构、文件。缺少任何一部分,都无法编出完好的程序。另外,“学生通讯录管理系统”对思维能力要求苛刻,能够使学生真正地掌握所学知识。

    原创性声明

    本人郑重声明本报告内容,是由作者本人独立完成的。有关观点、方法、数据和文献等的引用已在文中指出。除文中已注明引用的内容外,本报告不包含任何其他个人或集体已经公开发表的作品成果,不存在剽窃、抄袭行为。

    特此声明!

    展开全文
  • MFC实现的通讯录管理系统,数据库使用的是ACCESS,并且打包了,有详细的注释说明。课程设计必备
  • 学生通讯录管理系统

    多人点赞 热门讨论 2021-06-19 16:34:05
    学生通讯录管理系统》一、需求二、设计内容三、设计要求四、总体设计五、详细设计①输入模块设计思路②查找模块设计思路③删除模块设计思路④修改模块设计思路⑤排序模块设计思路⑥显示模块设计思路⑦菜单模块设计...
  • 数据结构课程设计学生通讯录管理系统,用C++语言实现

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,082
精华内容 832
关键字:

学生通讯录管理系统设计