精华内容
下载资源
问答
  • 学院学生管理系统,对学院学生的基本信息(如学号、姓名、性别、专业、年级、出生日期、家庭住址、电话号码等)进行录入并保存到文件管理人员可以使用文件...使用C语言和数据结构知识编写程序,实现上述相关功能。
  • 这是一个数据结构课程设计题商品管理系统,用C语言写的,该商品管理系统包含商品录入功能,商品增加功能,商品删除功能,商品更新功能,商品查询功能,商品保存到文件功能和从文件中导入商品信息功能。里面还有商品...
  • 这是一个数据结构课程设计题,商品管理系统,用C语言写的,里面包含了该系统的相关文档
  • 数据结构上机作业,链表写列车时刻表管理系统,cpp文件
  • c++编写的图书管理系统,可实现基本功能,使用文件存取,为数据结构课程设计而做,包含源码及所有文档
  • 再给同学们呈上我大二时的数据结构课程设计,完全又本人完成,无雷同版。题目为宿舍管理系统,里面有详细代码和分工,包括文件操作,代码风格清晰,有注释,仅供参考。
  • 数据结构课程设计-通讯录管理系统(C语言版)

    万次阅读 多人点赞 2020-12-12 13:48:18
    ##数据结构课程设计-通讯录管理系统 一,前言 自从上次C语言课设写完后,这次数据结构课设就写的游刃有余了,很快啊,不足三天就写完了它(年轻人不讲武德),如果你认真看过我之前写的C语言课程设计-球队管理系统,...

    ##数据结构课程设计-通讯录管理系统

    一,前言

    自从上次C语言课设写完后,这次数据结构课设就写的游刃有余了,很快啊,不足三天就写完了它(年轻人不讲武德),如果你认真看过我之前写的C语言课程设计-球队管理系统,你就不难发现,这次数据结构的课设完全就是那篇直接改过来的,也就存储结构变了一下。
    C语言课设在这里-----球队管理系统(C语言版)

    废话先不多说,直接上完整代码:

    二,直接上代码

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<malloc.h>
    typedef int ElemType;
    typedef struct person{
    	char num[10];//编号 
    	char name[10];//姓名 
    	char sex[10];//性别 
    	char phone[10];//电话 
    }personal;/*={};测试*/
    typedef struct node
    {
    	person data;//数据域 
    	struct node * next;//指针域 
    }ListNode,* LinkList;
    LinkList InitList();
    LinkList Create(LinkList head);
    void List(LinkList head);//显示所有记录 
    void save(LinkList head);//保存到文件 
    void Find(LinkList head);//按要求查找 
    int GetLength(LinkList head);//总记录条数 
    void Add(LinkList head);//增加新的记录 
    void Alter(LinkList head);//修改 
    void Delete(LinkList head); //删除 
    void Statis_sex(LinkList head);//性别个数 
    void Quit();//退出选单 
    void Menu(LinkList head);//选单
    //Creat模块已通过读取文件信息实现 
    LinkList InitList()
    {
    	LinkList head=(LinkList)malloc(sizeof(ListNode));//创立头结点
    	if(head==NULL)
    	{
    		printf("空间分配无效!");		
    		exit(-1);//退出程序
    	}
    	head->next=NULL;
    	return head;
    }
    LinkList Create(LinkList head)
    {
        person LM;//接受文件数据 
        LinkList rear;
        rear=head;
        FILE *fp= fopen("file.txt","r");
        if(fp==NULL)
        {
            printf("打开文件失败!");
            return NULL; 
        }
         
       while(fscanf(fp,"%s%s%s%s",LM.num,LM.name,LM.sex,LM.phone)!=EOF)//处理到文件尾 
        {  
           LinkList s=(LinkList)malloc(sizeof(ListNode));
           s->data=LM;
           s->next=NULL;
           rear->next=s;
           rear=s;
        }
        fclose(fp);
        return head;
    } 
    void List(LinkList head) {
    	LinkList p;
    	p = head->next;
    	if (!p) //如果head指针为空说明链表为空
    	{
    		printf("\n链表为空!\n\n");
    	}
    	else
    	{
    		printf("\n通信录:\n\n");
    		printf("编号	姓名	性别	电话 \n");
    		while (p)  //循环将各个节点值输出
    		{		
    			printf("%s\t%s\t%s\t%s\n",p->data.num,p->data.name,p->data.sex,p->data.phone);//打印
    			p = p->next;//此句放在打印后面,防止产生野指针 
    		}
    		Statis_sex(head);
    		printf("\n返回主菜单\n");
    		system("pause");//页面停留
    		Menu(head);
    	}
    }
    void save(LinkList head)
    {
    	LinkList rear;
    	person LM;
    	rear=head->next;//跳过头节点 
    	FILE *fp;
    	int i;
        if((fp=fopen("file.txt","wb"))==NULL)/*只打开或建立一个二进制文件,只允许写数据*/
    	{
    		printf("\n文件不存在!\n");
    	}
    	while(rear)//处理到文件尾 
        {  
        	LM=rear->data;
        	fprintf(fp,"%s\t%s\t%s\t%s\n",LM.num,LM.name,LM.sex,LM.phone);
        	rear=rear->next;
        }
        fclose(fp);
    }
    void Find(LinkList head)
    {
    	int Loop=0;
    	char name[10];
    	printf("请输入要查询联系人的姓名[     ]\b\b\b\b\b\b");
    	scanf("%s",name);
    	LinkList rear=head->next; 
    	while(rear)
    	{
    		if (strcmp(rear->data.name,name)==0) 
    			{
    				printf("编号	姓名	性别	电话 \n");
    				printf("%s\t%s\t%s\t%s\n",rear->data.num,rear->data.name,rear->data.sex,rear->data.phone);
    				Loop=1;
    			}
    		rear=rear->next;
    	 }
    	if(Loop==1)
    		{
    			printf("\n查询联系人成功!返回菜单\n");
    			system("pause");
    			Menu(head); 
    	 	} 
    	else
    	{
    		int n;
    		printf("无此联系人!!!\n\n返回菜单(1) or 重新输入(2)[  ]\b\b\b");
    	 	scanf("%d",&n);
    	 	printf("\n");
    		switch(n)
    		{
    			case 1:system("cls");Menu(head);break;
    			case 2:system("cls");Find(head);break;
    		}
    	}
    }
    int GetLength(LinkList head)
    {
    	LinkList p=head->next;
    	int i=0;
    	while(p)
    	{
    		i++;
    		p=p->next;
    
    	}
    	return i;
    }//获取链表长度 
    void Add(LinkList head)
    { 
    	char c;
    	person LM;
    	LinkList p=head;
    	printf("请输入新建联系人的信息\n\n编号	/姓名	/性别	/电话号码:\n");
    	do
    	{
    		scanf("%s",LM.num);
    		scanf("%s",LM.name);
    		scanf("%s",LM.sex);
    		scanf("%s",LM.phone);
    		LinkList s=(LinkList)malloc(sizeof(ListNode));
    		s->data=LM;
    		s->next=NULL;
    		while(p->next)
    		{
    			p=p->next;
    		}
    		p->next=s;
    		save(head);
    		printf("是否继续添加 y/n\n");
    		scanf(" %c",&c);
    	}while(c=='y'||c=='Y');
    	printf("\n返回主菜单\n");
    	system("pause");
    	Menu(head);
    }
    void Alter(LinkList head)
    {
    	int loop=0;
    	int n;
    	char name[10];
    	printf("请输入要查询联系人的姓名 [     ]\b\b\b\b\b\b");
    	scanf("%s",name);
    	printf("\n");
    	LinkList rear=head->next; 
    	while(rear)
    	{
    		if (strcmp(rear->data.name,name)==0)
    			{
    				printf("请输入要修改的内容:(1)编号 (2)姓名 (3)性别 (4)电话号码 (5)全部信息 [ ]\b\b");//printf("%s\t%s\t%s\t%s\n",rear->data.num,rear->data.name,rear->data.sex,rear->data.phone);
    				scanf("%d",&n);
    				printf("\n");
    				switch(n)
    				{
    					case 1: printf("请输入修改后的编号:");scanf("%s",rear->data.num);break;
    					case 2: printf("请输入修改后的姓名:");scanf("%s",rear->data.name);break;
    					case 3: printf("请输入修改后的性别:");scanf("%s",rear->data.sex);break;
    					case 4: printf("请输入修改后的电话号码");scanf("%s",rear->data.phone);break;
    					case 5: printf("请输入要修改联系人的信息: \n\n编号	姓名	性别	电话号码:\n");
    					scanf("%s",rear->data.num);
    					scanf("%s",rear->data.name);
    					scanf("%s",rear->data.sex);
    					scanf("%s",rear->data.phone);break;
    				}
    				system("cls");
    				loop=1;
    			}	
    		rear=rear->next;
    	 }
    	 if(loop==0)
    	 {
    	 	printf("无此联系人!!!\n\n返回菜单(1) or 重新输入(2)[  ]\b\b\b");
    	 	scanf("%d",&n);
    	 	printf("\n");
    		switch(n)
    		{
    			case 1:system("cls");Menu(head);break;
    			case 2:system("cls");Alter(head);break;
    		}
    	 }
    	save(head);
    	printf("\n修改成功!返回菜单\n");
    	system("pause");
    	Menu(head);
    }
    void Delete(LinkList head)
    {
    	LinkList rear=head;//用来找要删除节点的前一节点 
    	LinkList p=rear->next;//用来找要删除节点
    	char name[10];
    	int Loop=0,n;
    	printf("请输入要删除联系人的姓名:[    ]\b\b\b\b\b");
    	scanf("%s",name);
    	printf("\n");
    	while(p)
    	{
    		if(strcmp(p->data.name,name)==0)
    		{
    			rear->next=p->next;
    			free(p);
    			save(head); 
    			Loop=1;
    		}
    		rear=p;
    		p=p->next;
    	}
    	if(Loop==1)
    	{
    		printf("\n删除联系人成功!返回菜单\n");
    		system("pause");
    		Menu(head); 
    	 } 
    	else
    	{
    		printf("无此联系人!!!\n\n返回菜单(1) or 重新输入(2)[  ]\b\b\b");
    	 	scanf("%d",&n);
    	 	printf("\n");
    		switch(n)
    		{
    			case 1:system("cls");Menu(head);break;
    			case 2:system("cls");Delete(head);break;
    		}
    	}
    }
    void Statis_sex(LinkList head)
    {
    	int i=0;//记录男性数目 
    	int j=GetLength(head);//获取总记录数 
    	LinkList rear=head->next;
    	char sex[10]="man";
    	while(rear)
    	{
    		if(strcmp(rear->data.sex,sex)==0)
    			i++;
    		rear=rear->next; 
    	 } 
    	 printf("\n通信录中男性有 %d 人,有女性 %d 人。\n",i,j-i);
    }
    void Quit()
    {
    	printf("\n\t                         ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★\n\n");
    	puts("\n");
    	puts("\t                             ┃                                               ┃");
    	puts("\t                             ┃                                               ┃");
    	puts("\t                             ┃     感谢访问通信录管理系统!欢迎下次再来!      ┃");
    	puts("\t                             ┃                                               ┃");
    	puts("\t                             ┃                                               ┃");
    	puts("\t                             ┃                  制作人:追足梦幻                ┃");
    	puts("\t                             ┃                          2020.7.3             ┃ ");
    	puts("\n ");
    
    }
    void Menu(LinkList head)
    {
    	int n;
    	int choice=0;
    	do
    	{
    		system("cls");
    		printf("\n");
    		printf("                                              ---通讯录管理系统---\n");
    		puts("\n");
    		printf("                                             1/按姓名查询联系人信息\n");
    		puts("\n");
    		printf("                                             2/  新建联系人\n");
    		puts("\n");
    		printf("                                             3/修改联系人信息\n");
    		puts("\n");
    		printf("                                             4/ 删除联系人信息\n");
    		puts("\n");
    		printf("                                             5/显示所有联系人信息\n");
    		puts("\n");
    		printf("                                             6/     退出\n");
    		puts("\n");
    		printf("                                          请选择服务种类(1-6) : [ ]\b\b");
    	    scanf("%d",&n);
    	    if(n<1||n>6)
    		{
    		   system("cls");
    		   printf("选择错误!  请重新选择!\n");
    		   system("pause");
    		   choice=1;
    		}
    		else
    		{
    			break;
    		}
    	}while(choice==1);
    
    		switch(n)
    		{ 
    			case 1:system("cls");Find(head);break;//Find函数查询 
    			case 2:system("cls");Add(head);break;//Add函数新建联系人 
    			case 3:system("cls");Alter(head);break;//Alter修改联系人信息 
    			case 4:system("cls");Delete(head);break;//Delete删除联系人信息 
    			case 5:system("cls");List(head);break;//List显示所有信息 
    			case 6:system("cls");Quit();break;//退出 
    		}
    }
    int main()
    {
    	LinkList head=InitList();
    	head=Create(head);
    	printf("\n信息录入成功!");
    	system("pause"); 
    	Menu(head); 
     } 
    

    三,设计报告

    接下来是我课设报告中的设计部分内容

    一、 引言(简要说明设计题目的目的、意义、内容、主要任务等)

    目的:构建通讯录管理系统
    意义:对于一个通信录来说,要管理联系人的信息,包括编号,姓名,性别,电话。开发其系统主要为了帮助用户提高通讯录有管理效率,节约资源,提高信息的精确度。
    内容:九大模块((主函数main(),菜单函数Menu(),退出选单函数Quit(),创建数据函数Create(),增减数据函数Add(),查找函数Find(),修改函数Alter(),删除函数Delete(),显示所有记录函数List())加上四个辅助功能函数(初始化链表函数InitList(),保存函数save(),获取链表长度函数GetLength(),统计性别函数Statis_sex())。
    主要任务:
    1,打开文件读取通信录信息
    2,通过链式存储接受文件储存信息
    3,对文件信息进行修改
    4,保存修改并将信息写回文件

    二、 正文(课程设计的主要内容,包括实验与观测方法和结果、仪器设备、计算方法、编程原理、数据处理、设计说明与依据、加工整理和图表、形成的论点和导出的结论等。正文内容必须实事求是、客观真切、准确完备、合乎逻辑、层次分明、语言流畅、结构严谨,符合各学科、专业的有关要求。)

    主要内容:首先定义结构体,定义主函数,定义链表初始化函数,用主函数调用链表初始化函数构建链表 head,接下来的所有操作基于链表head,调用Create()函数以将文件里面的数据写出并赋给链表,链表里面每个结点的属性为定义的结构体类型,然后调用Menu()函数以显示欢迎界面和菜单。
    Menu函数通过switch条件语句调用各功能函数,选择1时,
    1, 可按姓名查询联系人;
    2, 新建联系人并保存到文件;
    3, 可以修改联系人信息并保存,修改联系人信息有包括了对联系人编号,姓名,性别,电话号码的分别修改,也可以同时对编号,姓名,性别,电话号码修改;
    4, 修改联系人信息;
    5, 显示所有联系人信息并停机男女个数;
    6, 可以调用fail函数以显示退出系统页面。

    总流程图
    在这里插入图片描述
    每模块都需有每个函数功能介绍,截图,关键代码等

    1, 定义结构体

    typedef struct person{
    	char num[10];//编号 
    	char name[10];//姓名 
    	char sex[10];//性别 
    	char phone[10];//电话 
    }personal;
    
    typedef struct node
    {
    	person data;//数据域 
    	struct node * next;//指针域 
    }ListNode,* LinkList;
    
    

    2, 链表初始化

    LinkList InitList()
    {
    	LinkList head=(LinkList)malloc(sizeof(ListNode));//创立头结点
    	if(head==NULL)
    	{
    		printf("空间分配无效!");		
    		exit(-1);//退出程序
    	}
    	head->next=NULL;
    	return head;
    }
    3,主函数
    int main()
    {
    	LinkList head=InitList();
    	head=Create(head);
    	printf("\n信息录入成功!");
    	system("pause"); 
    	Menu(head); 
     }
    

    首先初始化链表 head,然后或读取文件file.txt中的数据挂靠到链表 head=Create()

    4, 读取文件数据到链表Create()
    打开文件 file.txt FILE *fp= fopen(“file.txt”,“r”); 然后从头到尾处理文件将每一个联系人的数据写入结构体变量,并挂靠到链表中

    while(fscanf(fp,"%s%s%s%s",LM.num,LM.name,LM.sex,LM.phone)!=EOF)//处理到文件尾 
    {  
           LinkList s=(LinkList)malloc(sizeof(ListNode));
           s->data=LM;
           s->next=NULL;
           rear->next=s;
           rear=s;
        }
    

    fclose(fp); 记得一定要关闭文件
    return head; 此时返回的链表就是一个满载数据的链表了,以后的操作都基于这条链表

    5,菜单函数Menu()
    关键代码: switch() 选择语句

    6,按姓名查找 Find()
    遍历链表知道找到要查询联系人姓名为止
    关键代码:

    LinkList rear=head->next; //跳过第一个节点,因为第一个节点没有存数据
    	while(rear)//循环直到链表结束
    	{
    		if (strcmp(rear->data.name,name)==0) //字符串比较函数,如果与输入联系人姓名相同则打印
    			{
    				printf("编号	姓名	性别	电话 \n");
    				printf("%s\t%s\t%s\t%s\n",rear->data.num,rear->data.name,rear->data.sex,rear->data.phone);
    				Loop=1;
    			}
    		rear=rear->next;//循环进行下去的标志
    	 }
    
    

    7,新增加新的记录Add()
    定义结构体变量LM person LM;
    将要新建的联系人信息赋给 LM;
    再用尾插法将LM添加到链表head
    关键代码:

    LinkList s=(LinkList)malloc(sizeof(ListNode));
    		s->data=LM;
    		s->next=NULL;
    		while(p->next)
    		{
    			p=p->next;
    		}//处理到最后防止产生野指针
    		p->next=s;//插入s
    		save(head);//记得保存修改
    
    

    8,保存函数save
    打开文件只允许写数据,文件从头处理到位,并将链表中的数据写入文件
    关键代码:

    LinkList rear;
    	person LM;
    	rear=head->next;//跳过头节点 
    	FILE *fp;
    	int i;
        if((fp=fopen("file.txt","wb"))==NULL)/*只打开或建立一个二进制文件,只允许写数据*/
    	{
    		printf("\n文件不存在!\n");
    	}
    	while(rear)//处理到文件尾 
        {  
        	LM=rear->data;
        	fprintf(fp,"%s\t%s\t%s\t%s\n",LM.num,LM.name,LM.sex,LM.phone);
        	rear=rear->next;
    }
    fclose(fp);//处理完,一定要关闭文件
    

    9,修改信息函数Alter()
    遍历链表数据,查找输入的关键字(姓名),找到后锁定这一结点并通过一个switch语句选择要修改的信息(编号,姓名,性别,电话号码,全部信息),选择好后对应结点数据相应位置覆盖修改即可。
    关键代码:

    while(rear)
    	{
    		if (strcmp(rear->data.name,name)==0)
    			{
    				printf("请输入要修改的内容:(1)编号 (2)姓名 (3)性别 (4)电话号码 (5)全部信    息 [ ]\b\b");
    				scanf("%d",&n);
    				printf("\n");
    				switch(n)
    				{
    					case 1: printf("请输入修改后的编号:");scanf("%s",rear->data.num);break;
    					… …
    					scanf("%s",rear->data.num);
                        … …
    				}
    			}	
    		rear=rear->next;
    	 }
    

    修改完save()保存
    10,删除联系人信息函数Delete()
    删除节点图解:
    在这里插入图片描述
    遍历链表,寻找关键字(姓名),分别用两个指针(rear,p)指向关键字这一结点和它前一结点,
    关键代码:

    while(p)
    	{
    		if(strcmp(p->data.name,name)==0)
    		{
    			rear->next=p->next;
    			free(p);//释放删除的结点
    			save(head); 
    			Loop=1;
    		}
    		rear=p;
    		p=p->next;
    	}
    
    

    11,显示所有信息List()
    从头到尾遍历链表,打印除头结点的数据域的数据即可。
    关键代码:

    LinkList p;
    	p = head->next;
    	{
    		printf("\n通信录:\n\n");
    		printf("编号	姓名	性别	电话 \n");
    		while (p)  //循环将各个节点值输出
    		{		
    			printf("%s\t%s\t%s\t%s\n",p->data.num,p->data.name,p->data.sex,p->data.phone);//打印
    			p = p->next;//此句放在打印后面,防止产生野指针 
    		}
    		Statis_sex(head);//显示性别人数
    

    12,统计性别人数Statis_sex()
    先计算出链表总长度 j,再以某一性别作为关键字遍历链表并计数统计这一性别的人数i,用j-i即是另一性别的人数。
    关键代码;

    int i=0;//记录男性数目 
    	int j=GetLength(head);//获取总记录数 
    	LinkList rear=head->next;
    	char sex[10]="man";
    	while(rear)
    	{
    		if(strcmp(rear->data.sex,sex)==0)
    			i++;
    		rear=rear->next; 
    	 } 
    	 printf("\n通信录中男性有 %d 人,有女性 %d 人。\n",i,j-i);
    

    13, 获取链表长度GetLength()
    从头到尾遍历链表并计数
    关键代码:

    {
    	LinkList p=head->next;
    	int i=0;
    	while(p)
    	{
    		i++;
    		p=p->next;
    
    	}
    	return i;
    }//获取链表长度
    
    
    

    关键步骤运行截图
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    三、结论(应当准确、完整、明确精练;也可以在结论或讨论中提出建议、设想、尚待解决问题等。
    1、课程设计的特点
    根据问题描述可知,需要解决问题并不复杂,整个问题只需要实现一个通讯录管理系统功能,那就是在这个系统中实现对通信录信息的插入、删除、查询、修改以及保存。但是,为了实现该功能,却需要优秀的算法和数据结构以保证实现的时间和空间效率。把联系人信息存储在一个单链表中,利用指针实现对联系人信息的各项基本操作。
    2、存在的不足
    虽然设计的程序完成了题目描述所需要实现的功能,但是仍然存在不尽人意的地方。那就是可以再排序上面多设计几个算法。实现多角度排序。
    3、心得体会
    经过这次数据结构课程设计,我们不仅及时巩固的了数据结构、算法、以及软件工程的知识,并对数据结构和算法的配合对于程序时间和空间性能的影响以及软件工程提供的开发流程和工具对于实现特定功能程序的重要意义。
    当我们面对一个实际问题,应该迅速根据问题性质和特点抽象成特定的数据结构,当然每个问题都有可能能够抽象成多种数据结构,每种数据结构适应于不同的算法,例如,马踏棋盘问题就可以采用广度优先搜索或深度优先搜索来解决。因此此时就应该综合考虑这样的数据结构、算法以及它们的空间和时间效率,然后从中选择一个作为实现程序的基础。
    此外,对程序的测试应该要仔细,根据模块的特点和测试阶段,采用各种软件测试方法对程序进行测试,确保各个模块的正确性和完整性,最后集成起来测试其是否正确和完整地实现了问题描述中要求的功能。

    4、程序经验教训总结:
    通过这个程序设计,我不仅提高了动手操作能力,对 C语言和数据结构有了更深的认识, 能够更好地运用 C语言进行编程设计,同时在思维、看待问题的全面性等方面也有了很大的提高。不过由于时间、经验不够、对语言的掌握程度不深等问题,在这个系统设计还存在一些问题,比如内存设计还不够完善,整个系统的流畅性等,希望可以在今后的设计上能够解决这些问题,做的更好。
    四、参考文献
    [1] 严蔚敏,吴伟民编著.《数据结构(C语言版)》.北京:清华大学出版社,1997.4. 18-39
    [2] 菜鸟教程 网站https://www.runoob.com/
    [3] CSDN 网站 https://www.csdn.net/

    展开全文
  • 数据结构课程设计图书管理系统;数据结构课程设计图书管理系统;数据结构课程设计图书管理系统;数据结构课程设计图书管理系统;数据结构课程设计图书管理系统;数据结构课程设计图书管理系统;数据结构课程设计图书管理...
  • 数据结构

    千次阅读 2021-03-13 08:28:44
    数据结构: 研究数据如何在计算机中进行组织和存储,是我们可以高效的获取数据或者修改数据。 在内存进行增删改查。 数据结构基础 ...优先队列(组织存储进程)、内存管理文件管理都需要使用到数据结

    数据结构:
    研究数据如何在计算机中进行组织和存储,是我们可以高效的获取数据或者修改数据。
    在内存进行增删改查。

    数据结构基础
    分类:
    线性结构有
    数组、栈、队列、链表、哈希表…
    树结构有
    二叉树、二分搜索树、AVL红黑树、Treap、Splay、堆、Trie、线段树、K-D树、并查集、哈夫曼树…
    图结构有
    邻接矩阵、邻接表
    我们需要根据不同的应用来灵活选择最合适的数据结构

    数据库中的树结构:
    AVL、红黑树、B类树
    哈希表

    操作系统中的数据结构
    优先队列(组织存储进程)、内存管理、文件管理都需要使用到数据结构

    文件压缩会用到压缩算法 哈夫曼树

    寻路算法:
    图论算法
    DFS:使用栈
    BFS:使用队列

    展开全文
  • 数据结构:实现图书信息管理系统

    千次阅读 多人点赞 2020-04-24 18:32:18
    数据结构:顺序表实现图书信息管理系统 大一的数据结构实验拖延了相当长一段时间,最近老师终于让我们实验形式完成一次数据结构作业,我把自己的渣程序放在这里,希望能对肝实验的同学提供帮助,也希望各位大神路过...

    数据结构:顺序表实现图书信息管理系统

    大一的数据结构实验拖延了相当长一段时间,最近老师终于让我们实验形式完成一次数据结构作业,我把自己的渣程序放在这里,希望能对肝实验的同学提供帮助,也希望各位大神路过的时候能指出我的不足

    实验要求

    一、基本要求

    1、基于顺序存储结构的图书信息表的创建和输出定义一个包含图书信息(书号、书名、价格等)的顺序表,读入相应的图书数据来完成图书信息表的创建,然后统计图书表中的图书个数,同时逐行输出每本图书的信息。

    2、将图书按照价格降序排序,逐行输出排序后每本图书的信息。

    3、将所有低于平均价格的图书价格提高 20%,所有高于或等于平均价格的图书价格提高 10%,最后逐行输出价格修改后的图书信息。

    4、输出逆序存储后每本图书的信息。

    5、查找价格最高的图书,输出相应图书的信息。

    6、根据指定的最爱图书的名字,查找最爱的图书,输出相应图书的信息。

    7、根据指定的最佳位置的序号,查找该位置上的图书,输出相应图书的信息。

    8、将新图书插入到图书表中指定的位置上。

    9、根据指定的待出库的旧图书的位置,将该图书从图书表中删除,最后输出
    该图书出库后的所有图书的信息。

    二、老师要求

    1、尽量用同一个表实现上述功能

    2、可自行增加该系统功能

    三、个人附加功能

    1、以彩色界面呈现该系统

    2、可一键清空所有数据

    3、可按作者查找书籍(作者名需完整)

    4、读取文件中的书籍信息并存入系统

    5、可临时输入数据

    6、以保留两位小数形式显示价格(怎么感觉这么多余。。。)

    实现代码

    头文件以及定义顺序表和书籍结构

    #include<iostream>
    #include<string.h>
    #include <cassert>
    #include <iomanip>
    #include<fstream>
    #include<stdlib.h>
    #include<conio.h>
    #include<malloc.h>
    #define maxsize 30
    using namespace std;
    typedef struct {                                //定义结构体:book
    	int num;                                    //序号
    	char name[maxsize];                         //书名
        float price;                                //价格
        char writer[maxsize];                       //作者
        char time[11];                              //出版时间
    }book;
    typedef struct{
    	book *data;                                 //数据存储域
    	int length;                                 //长度域
    }linklist;
    

    创建空表

    void init(linklist &L)           
    {
    	L.data=(book*)malloc(maxsize*sizeof(book));
    	L.length=0;               //开创空间后再设置长度为0 
    }
    

    输出信息

    void printflist(linklist &L)
    {
    	int i;
    	for(i=0;i<L.length;i++)
    	{
    		cout<<L.data[i].num<<" 《"<<L.data[i].name<<"》 ¥"<<setiosflags(ios::fixed)<<setprecision(2)<<L.data[i].price;
    		cout<<" 作者:"<<L.data[i].writer<<" 出版时间:"<<L.data[i].time;
    		cout<<"\n";
    	}
    }
    

    删除指定信息

    bool deletelist(linklist &L,int i) 
    {      
    	int k;
    	if(i<1||i>L.length+1)                   //指定元素位置过于奇特
    	return false;
    	for(k=i;k<=L.length;k++) 
    	{
    		L.data[k-1]=L.data[k];              //将后面元素依次前移 
    	}
    	L.length--;
    	return true;
    }
    

    根据价格降序排列

    void pricejiang(linklist &L)			//把*位置的‘<’改一下就是换一种顺序排列
    {
    	int i,j;
    	int n=L.length; 
    	linklist t; 
    	for(i=0;i<n-1;i++)													
    	{
    		for(j=i+1;j<n;j++)
    		{
    			if(L.data[i].price<L.data[j].price)//*
    			{
    			t.data[0]=L.data[i];
    			L.data[i]=L.data[j];
    			L.data[j]=t.data[0];
    			}
    		}
    	}
    	cout<<"已完成排序:";
    	printflist(L);
    }
    

    批量更改价钱(这功能。。。)

    void moneychange(linklist &L)
    {
    	double sum=0;
    	int i;
    	for(i=0;i<L.length;i++)
    	{
    		sum+=L.data[i].price;
    	}
    	sum/=L.length;
    	i=0;
    	while(i<L.length)
    	{
    		if(L.data[i].price<sum)
    		{L.data[i].price=L.data[i].price*6/5;}
    		else
    		{L.data[i].price=L.data[i].price*11/10;}
    	}
    	cout<<"已完成价格改动\n";
    	printflist(L);
    }
    

    逆转排序

    void blacktowhite(linklist &L)
    {
    	linklist S;
    	init(S);
    	int i,n=L.length;
    	for(i=0;i<n;i++)
    	{S.data[i]=L.data[i];}
    	for(i=0;i<n;i++)
    	{L.data[i]=S.data[n-i-1];
    	deletelist(S,n-i);
    	L.length++;}
    	cout<<"逆置成功\n"; 
    }
    

    根据书名查找信息

    void chaname(linklist &L)		//根据书名查找信息 
    {
    	int i,n=0; 
    	char bookname[20];
    	cout<<"请输入需要查找图书的书名:";
    	cin>>bookname;
    	int num=L.length;
    	for(i=0;i<num;i++)
    	{
    		if(strcmp(L.data[i].name,bookname)==0)
    		{
    			n++;
    			cout<<"查找成功! 该图书的信息为:\n"<<endl;
    			cout<<L.data[i].num<<" ";
    			cout<<" 《"<<L.data[i].name<<"》  "<<setiosflags(ios::fixed)<<setprecision(2)<<L.data[i].price<<"  "<<L.data[i].writer<<"  "<<L.data[i].time; 
    		}
    	}	
    	 if(n==0)
    	 	cout<<"查找失败!"<<endl;
    }
    

    根据作者查找信息

    void chawriter(linklist &L)		//根据作者查找信息 
    {
    	int i,n=0; 
    	char bookname[20];
    	int num=L.length;
    	cout<<"请输入需要查找图书的作者:";
    	cin>>bookname;
    	cout<<"查找结果"; 
    	for(i=0;i<num;i++)
    	{
    		if(strcmp(L.data[i].writer,bookname)==0)
    		{
    			n++;
    			cout<<L.data[i].num<<" ";
    			cout<<L.data[i].name<<" "<<L.data[i].name<<"  价格:"<<L.data[i].price<<"  "<<L.data[i].time<<"出版  作者:"<<L.data[i].writer; 
    		}
    	}	
    	 if(n==0)
    	 	cout<<"查找失败!"<<endl;
    }
    
    

    插入元素

    bool insert(linklist &L,int i,book &e)
    {
    	
    	int j;
    	if(i<1||i<L.length+1)//位置不合法,返回失败 
    	{return false;}
    	i--;//对应下标状态;
    	for(j=L.length;j>i;j--)
    	{L.data[j]=L.data[j-1];}//i后所有元素在顺序表上向后移动一位 
    	strcpy(L.data[i].name,e.name);
    	L.data[i].price=e.price;
    	strcpy(L.data[i].writer,e.writer);//将e放入第i位 
    	strcpy(L.data[i].time,e.time);
    	L.length=L.length+1;
    	return true;   
    }
    

    查找最贵的书

    bool findmax(linklist &L)
    {
    	if(L.length=0)
    	{return false;}
    	int i=1,index=0;
    	float exp=L.data[0].price;
    	while(i<L.length)
    	{
    		if(L.data[i].price>exp)
    		{
    			exp=L.data[i].price;
    			index=i;
    		}
    	}
    	cout<<"最贵的图书信息如下:";
    	cout<<L.data[index].num<<" 《"<<L.data[index].name;
    	cout<<"》 ¥"<<L.data[index].price<<" 作者:"<<L.data[index].writer<<" 出版时间:"<<L.data[index].time;
    }
    

    输入信息

     bool input(linklist &L)
    {
    	cout<<"输入信息"; 
    	char i;
    	int y;
    	int j,k;
    	if(L.length>maxsize)
    	{cout<<"库存已满";return false;}    
    	else
    	{for(;;y++){
    		L.data[L.length].num=L.length+1;
    		cout<<L.data[L.length].num<<"\n";
    		cout<<"输入书籍名称:";cin>>L.data[L.length].name;
    		cout<<"输入价格:";cin>>L.data[L.length].price;
    		cout<<"输入作者:";cin>>L.data[L.length].writer;
    		cout<<"输入出版时间:";cin>>L.data[L.length].time; 
    		L.length++;
    		cout<<"结束输入?\n 是(Y)   否(other)\n选择:";
    		cin>>i;
    		if(i=='y'||i=='Y') 
    		{break;}
    		if(L.length>maxsize)
    		{
    			cout<<"库存已达上限!";
    			return false;
    		}
    	}
    	}
    	return true;
    }
    
    

    菜单函数与主函数

    void meau()
    {
    	cout<<"                    *图书管理系统*                   \n";
    	cout<<"-----------------------------------------------------\n";
    	cout<<"                    1.创建记录表格                   \n";
    	cout<<"                     -2.插入数据-                    \n";
    	cout<<"                     -3.删除数据-                    \n";
    	cout<<"                   -4.删除所有记录-                  \n";
    	cout<<"                     -5.读取文件-                    \n"; 
    	cout<<"                   -6.查看记录列表-                  \n";
    	cout<<"                     -7.价格调整-                    \n";
    	cout<<"                    -8.按书名查找-                   \n";
    	cout<<"                   -9.按作者查找-                    \n";
    	cout<<"                     -10.逆转排序-                    \n";
    	 cout<<"                   -11.按价格排序-                   \n"; 
    	 cout<<"                    -12.输入数据-                    \n";
    	cout<<"                       -0.退出-                      \n";
    	cout<<"                  |请输入选择:";
    }
    int main()
    {
    	linklist L;
    	book e;
    	init(L);
    	int choice;
    	do{
    		char a;
    		system("cls");                  //刷屏函数,用于返回主菜单,保持页面整洁
    		system("color E0");             //页面颜色为黄底黑字
    		meau();
    		cin>>choice;
    		switch(choice){
    			case 1:init(L); input(L); break;
    			case 2:cout<<"分别输入书名、价格、作者、出版时间:"; cin>>e.name>>e.price>>e.writer>>e.time;
    			       cout<<"想插入到第几个位置?"; 
    				   cin>>e.num; 
    				   insert(L,e.num,e); break;
    			case 3:printflist(L);
    			       cout<<"输入需要删除数据的编号:";
    			       int z; cin>>z;
    			       if(deletelist(L,z)==1)
    			       cout<<"删除成功!";
    			       else 
    				   cout<<"数据非法!!!";cout<<"按b键退出\n"; cin>>a;
    				   if(a=='b'||a=='B'){
    				   	break;
    				   }
    			case 4:for(int i1=1;i1<=L.length;i1++)
    			      {deletelist(L,i1);}
    			       cout<<"已删除所有数据";
    			       cout<<"按b键退出\n"; cin>>a;
    				   if(a=='b'||a=='B'){
    				   	break;
    				   }
    			case 5:
    			       break;
    			case 6:printflist(L); 
    			       cout<<"按b键退出\n"; cin>>a;
    				   if(a=='b'||a=='B'){
    				   	break;
    				   }
    			case 7:moneychange(L); cout<<"按b键退出\n"; cin>>a;
    				   if(a=='b'||a=='B'){
    				   	break;
    				   }
    			case 8:chaname(L); cout<<"按b键退出\n"; cin>>a;
    				   if(a=='b'||a=='B'){
    				   	break;
    				   }
    			case 9:chawriter(L); cout<<"按b键退出\n"; cin>>a;
    				   if(a=='b'||a=='B'){
    				   	break;
    				   }
    			case 10:blacktowhite(L); cout<<"按b键退出\n"; cin>>a;
    				   if(a=='b'||a=='B'){
    				   	break;
    				   }
    			case 11:pricejiang(L);  cout<<"按b键退出"; cin>>a;
    				   if(a=='b'||a=='B'){
    				   	break;
    				   }
    			case 12:input(L);   cout<<"按b键退出"; cin>>a;
    				   if(a=='b'||a=='B'){
    				   	break;
    				   }
    		}
    	}while(choice!=0);	
    	return 0; 
    }
    

    运行结果
    创建表格
    上述界面按Y之后
    在这里插入图片描述
    在这里插入图片描述

    实验结果与分析

    该程序历时3小时完成,其中我遇到了较多困难,如文件无法读入、程序运行时崩溃、显示信息时只显示了乱码等情况,程序前期运行过程中有很多的失误,导致了效率低下;但最终我还是通过询问老师,查阅书籍等方式改正了错误,实验结果的正确性也得到了验证。虽说可能仍存在一些不足之处,我也会虚心接受,在过程中力求做到尽可能的完善

    展开全文
  • 简单的职工管理系统(数据结构

    热门讨论 2010-03-20 19:18:03
    简单的职工管理系统,内含源代码和文档 简单的职工管理系统主要实现以下功能: (1) 新增一名职工:将新增职工对象按姓名以字典方式职工管理文件中。 (2) 删除一名职工:从职工管理文件中删除一名职工对象。 ...
  • 一个完整的数据结构课程设计,包括全部可运行代码和课程设计文档,完整的流程图。本系统采用c语言编写,采用排序二叉树、单向链表等作为主要数据结构,采用了二分查找等高效算法,人机交付界面友好,还等什么呢。。...
  • 数据结构课程设计 宿舍管理查询软件 家31大嶂秦皇岛分校 NorthEastern University At QinHuangDao 数据结构课程设计 宿舍管理查询软件 班级学号 班 学生姓名 提交日期 7月24日 成 绩 计算机与通信工程学院 一需求...
  • 运用数据结构中的树结构设计一个简单的目录管理系统用树的孩子双亲数据结构类型创建系统 用户输入的信息可以存储在内存,然后可以通过界面操作实现各个功能,,依树形图输入数据后能够成功建立系统,可实现数据信息的...
  • 数据结构课程设计,c语言版,该数据结构课程设计文档是学生成绩管理系统。本系统界面友好,使用c语言编写。文档后面附有源代码。希望对大家有所帮助。
  • 数据结构课程设计 - 通讯录管理系统

    万次阅读 多人点赞 2016-07-06 21:44:10
    本系统为简单的通讯录管理系统,运行系统时,将从文件中读取已有的数据内容记录在内存中,使用者可以对通讯录进行添加、删除、修改、浏览、查找等操作,每进行一项操作后将内存中的数据写入到文件中,同时并记录操作...

    一、 问题描述及要求

    设计并实现一个简单通讯录管理系统。要求:实现通讯录的建立、通讯者的删除、查询,以及通讯录的保存。

    二、 需求分析

    本系统为简单的通讯录管理系统,运行系统时,将从文件中读取已有的数据内容记录在内存中,使用者可以对通讯录进行添加、删除、修改、浏览、查找等操作,每进行一项操作后将内存中的数据写入到文件中,同时并记录操作者的操作内容和当地时间并记录到当前文件夹下的Log.dat文件中。

    三、总体设计

    1. 程序中用到的所有抽象数据类型定义

    ADT User
    {
        数据对象:
            D={name,number,add,email,remark|均为string类型}
        数据关系:
            R={ name,number,add,email,remark}
        基本运算:
            PeopleData(){}:构造函数
            ~PeopleData(){}:析构函数
            void SetData(string n, string num, string a, string e, string r):对对象的每项私有成员变量变量进行赋值
        void SetName(string n):对私有成员变量name变量赋值
        void SetNumber(string num):对私有成员变量number变量赋值
        void SetAdd(string a):对私有成员变量add变量赋值
        void SetEmail(string e):对私有成员变量email变量赋值
        void SetRemark(string r):对私有成员变量remark变量赋值
        string GetName():返回私有成员变量name值
        string GetNumber():返回私有成员变量numberstring GetAdd():返回私有成员变量addstring GetEmail():返回私有成员变量email值
        string GetRemark():返回私有成员变量remark值
    }
    ADT List
    {
        数据对象:
            D={list | Data类}
        数据关系:
            R={list}
        基本运算:
            Function(){}:构造函数
            ~Function():析构函数
            void AddData(Data &):增加一个联系人数据
            void SearchData(Data &):查找联系人
            int LocateData(Data &, string, int):按姓名或电话号码定位联系人,返回数据的地址
            void DeleteData(Data &):删除一个联系人
            void SaveData(Data &):保存内存中的数据到文件中
            void SearchName(Data &):按姓名查找联系人
            void SearchNumber(Data &):按电话号码查找联系人
            void OpenFile(Data &):从文件输入数据,初始化
            void ShowData(Data &):显示所有联系人的数据
            void ShowInfo(Data &, int, int):显示指定联系人数据
            void ReviseData(Data &):更改联系人数据
            void ReviseConcreteData(Data &, int, int):更改联系人的指定数据
            bool Old2New(Data &, int, int, string):显示原联系人信息和新联系人信息,判断是否修改
            void About():关于界面
            void MenuShow(int):菜单显示
            void HomePage():CMD窗体控制
            string GetTime():获得系统时间,记录日志时使用
            string int2str(int):将int类型数据转换成为string类型数据
            void SaveLog(int):将操作日志保存到文件中
            }
    }

    2.主程序流程图

    这里写图片描述

    3. 各程序模块之间的层次(调用)关系

    这里写图片描述

    四、详细设计

    本系统由5个文件组成,其中,2个cpp资源文件,3个h头文件。
    一共有3个类,1个结构体,它们的关系如图所示。
    这里写图片描述

    1、类和结构体介绍:

    联系人类(PeopleData)记录了联系人的基本信息,该类的设计由图所示,类的介绍如表所示。

    这里写图片描述

    功能类(Function)提供了通讯录管理系统各功能的实现方式,该类由不同的函数组成,均为Public型。
    该类的介绍如表所示。

    变量名称类型描述
    namestring姓名
    numberstring电话号码
    addstring地址
    emailstring邮箱
    remarkstring备注

    功能类(Function)提供了通讯录管理系统各功能的实现方式,该类由不同的函数组成,均为Public型。
    该类的介绍如表所示。

    函数名称类型描述
    AddData(Data &)void添加一个联系人数据
    SearchData(Data &)void查找联系人
    LocateData(Data &, string, int)int按姓名或电话号码定位联系人,返回数据的地址
    DeleteData(Data &)void删除一个联系人
    SaveData(Data &)void保存内存中的数据到文件中
    SearchName(Data &)void按姓名查找联系人
    SearchNumber(Data &)void按电话号码查找联系人
    OpenFile(Data &)void从文件输入数据,初始化
    ShowData(Data &)void显示所有联系人的数据
    ShowInfo(Data &, int, int)void显示指定联系人数据
    ReviseData(Data &)void更改联系人数据
    ReviseConcreteData(Data &, int, int)void更改联系人的指定数据
    Old2New(Data &, int, int, string)bool显示原联系人信息和新联系人信息,判断是否修改
    About()void关于界面
    MenuShow(int)void菜单显示
    HomePage()voidCMD窗体控制
    GetTime()string获得系统时间,记录日志时使用
    int2str(int)string将int类型数据转换成为string类型数据
    SaveLog(int)void将操作日志保存到文件中

    数据结构体(Data)记录了联系人线性表的数据和长度,它的定义如下:

    struct Data
    {
        PeopleData user[MaxSize];
        int length = 0;
    };

    类和结构体之间的关系:
    定义了PeopleData类之后,在Data结构体中声明PeopleData user[MaxSize]。
    定义Function类中,声明结构体对象Data list。
    定义了Function类之后,在Main类定义中声明Main类对象Function f。
    定义了Main类之后,声明全局类对象Main a。

    2、各功能模块实现函数

    本系统一共有添加、删除、查找、浏览、修改5个功能模块。
    初始化
    OpenFile(Data &l)

    变量名称变量类型描述
    lData &引用数据表
    name,number,add,email,remarkstring联系人各个变量信息
    infileifstream从文件流输入

    添加
    Void AddData(Data &l)

    变量名称变量类型描述
    lData &引用数据表
    n,num,a,e,rstring联系人各个变量信息

    查找
    SearchData(Data &l)

    变量名称变量类型描述
    lData &引用数据表
    choiceint选择指令

    LocateData(Data &l,string n,int s)

    变量名称变量类型描述
    lData &引用数据表
    nstring查找内容
    sint选择查找方式

    ShowInfo(Data &l, int i,int s)

    变量名称变量类型描述
    lData &引用数据表
    iint联系人数组地址
    sint选择查找方式

    删除
    DeleteData(Data &l)

    变量名称变量类型描述
    lData &引用数据表
    nstring删除的联系人姓名
    checkchar确认删除指令
    stateint查找状态

    浏览
    ShowData(Data &l)

    变量名称变量类型描述
    lData &引用数据表

    修改
    ReviseData(Data &l)

    变量名称变量类型描述
    lData &引用数据表
    nstring修改的联系人姓名
    stateint查找状态
    choiceint选择修改内容

    ReviseConcreteData(Data &l,int c,int s)

    变量名称变量类型描述
    lData &引用数据表
    cint选择修改内容
    sint联系人数组地址

    Old2New(Data &l, int c,int s, string n)

    变量名称变量类型描述
    lData &引用数据表
    cint选择修改内容
    sint联系人数组地址
    nstring新修改的内容
    checkchar确认修改指令

    日志记录
    GetTime()

    变量名称变量类型描述
    day, mon, yearint记录日,月,年
    hour, min, secint记录小时,分钟,秒
    timestring时间字符串

    int2str(int num)

    变量名称变量类型描述
    numint待转换数值
    strstring转换后的字符串

    SaveLog(int n)

    变量名称变量类型描述
    nint判断操作状态
    stateint将状态值进行判断
    outfileofstream向文件流中输入

    SaveData(Data &l)

    变量名称变量类型描述
    lData &引用数据表
    outfileofstream向文件流中输入

    其他
    MenuShow(int c)

    变量名称变量类型描述
    cint菜单显示

    About()

    变量名称变量类型描述
    x,ydouble坐标值

    3、关键算法分析

    3.1查找
    查找模块有2中方式进行查找,输入指令1时选择按姓名进行查找,输入指令2时按电话号码进行查找,无论是按姓名查找还是按电话号码查找,都是把当前输入的字符串传递到LocateData()函数中,进行顺序查找,若找到匹配的值,则返回该值在user[]中的逻辑序号,若查找失败,则返回-1。

    3.2修改
    修改模块允许操作者对联系人的数据进行修改操作,可以修改联系人的姓名、电话号码、地址、邮箱和备注。进行修改操作时,先输入修改联系人的姓名,进行查找操作,若查找失败则退出该模块,若成功则让操作者输入修改内容的指令,同时将联系人数据的原信息保存在temp变量里,调用Old2New()函数,将原信息和新信息进同时显示,方便操作者进行对比操作,最后让操作者确认是否修改。

    3.3日志记录
    日志记录记录了操作者在本系统的所有操作。
    本模块使用ctime头文件,使用GetTime()函数调用系统时间并用int2str()函数将int型数据转化成string数据类型。当完成每一项操作时,则当前时间和该操作的名称(修改、删除等)记录在当前文件夹的Log.dat文件中。

    3.4删除
    本系统的数据结构本质上线性表的操作,所以进行删除操作时,先进行查找操作,若查找成功则将当前后面的每一项数据表向前移动一位,直到n项数据表移动到n-1位置时则删除成功。

    4、程序运行截图

    4.1主页面
    这里写图片描述

    4.2添加
    这里写图片描述

    4.3查找
    这里写图片描述

    4.4删除
    这里写图片描述

    4.5修改
    这里写图片描述

    4.6浏览
    这里写图片描述

    4.7错误界面
    这里写图片描述
    这里写图片描述

    4.8日志记录
    这里写图片描述

    5.部分源代码

    Function.h

    struct Data
    {
        PeopleData user[MaxSize];
        int length = 0;
    };
    class Function
    {
    public:
        Function(){}
        ~Function();
        Data list;
        void AddData(Data &);
        void SearchData(Data &);
        int LocateData(Data &, string, int);
        void DeleteData(Data &);
        void SaveData(Data &);
        void SearchName(Data &);
        void SearchNumber(Data &);
        void OpenFile(Data &);
        void ShowData(Data &);
        void ShowInfo(Data &, int, int);
        void ReviseData(Data &);
        void ReviseConcreteData(Data &, int, int);
        bool Old2New(Data &, int, int, string);
        void About();
        void MenuShow(int);
        void HomePage();
        string GetTime();
        string int2str(int);
        void SaveLog(int);
    
    };
    class Main
    {
    public:
        Main();
    }a;

    PeopleData.h

    class PeopleData
    {
    private:
        string name;
        string number;
        string add;
        string email;
        string remark;
    public:
        PeopleData(){}
        ~PeopleData(){}
        void SetData(string n, string num, string a, string e, string r);
        void SetName(string n){ name = n; }
        void SetNumber(string num){ number = num; }
        void SetAdd(string a){ add = a; }
        void SetEmail(string e){ email = e; }
        void SetRemark(string r){ remark = r; }
        string GetName(){ return name; }
        string GetNumber(){ return number; }
        string GetAdd(){ return add; }
        string GetEmail(){ return email; }
        string GetRemark(){ return remark; };
    };

    Main类

    Main::Main()
    {
        Function f;
        char choice;
        f.OpenFile(f.list);
        while (1)
        {
            f.HomePage();
            f.MenuShow(0);
            cout << "请输入操作指令:";
            cin >> choice;
            switch (choice)
            {
            case '0':exit(0); f.SaveData(f.list);
            case '1':f.AddData(f.list); f.SaveData(f.list); f.SaveLog(1); break;
            case '2':f.DeleteData(f.list); f.SaveData(f.list); f.SaveLog(2); break;
            case '3':f.SearchData(f.list); f.SaveData(f.list); f.SaveLog(3); break;
            case '4':f.ShowData(f.list); f.SaveData(f.list); f.SaveLog(4); break;
            case '5':f.ReviseData(f.list); f.SaveData(f.list); f.SaveLog(5); break;
            case 'i':f.About(); break;
                default:
                cerr << "输入错误,请重新输入。" << endl;
                system("PAUSE");
                continue;
            }
        }
    }

    About()

    void Function::About()
    {
        double x, y;
        int H = 3;
        for (y = -4; y <= 0; y += 0.3)
        {
            for (x = -4; x <= 4; x += 0.2)
            if (fabs(sqrt(x*x + y*y) - H*sin(2 * atan(y / x))) <= 1 || fabs(sqrt(x*x + y*y) - H*sin(2 * atan(-y / x))) <= 1)
                cout << "*";
            else
                cout << " ";
            cout << endl;
        }
        for (y = -1; y <= 0; y += 0.2)
        {
            for (x = -4; x <= 4; x += 0.2)
            if (fabs(y) - 0.65*x*x >= 0.2)
                cout << "*";
            else
                cout << " ";
            cout << endl;
        };
        cout << "             通讯录" << endl << "             版本:5.0" << endl << endl;;
        system("PAUSE");
    }
    
    展开全文
  • 图书管理系统 (C语言数据结构

    千次阅读 多人点赞 2020-02-28 22:46:38
    (2)删除:按ISBN删除 (3)查找:按ISBN查找 (4)修改:按ISBN查找,然后修改各个属性 (5)排序:按ISBN排序 (6)计数:输出图书信息的个数 (7)导入:从TXT文件中读取已有图书信息(不同的属性之间用tab键隔...
  • 这个是我们大二时数据结构的假期大作业,C语言开发,tree结构 压缩包内容:源代码+程序设计说明书+可执行文件+配置文件 CSDN博客:http://blog.csdn.net/ye_shizhe
  • 资源名称:数据结构之项目实战经典案例(文档)资源目录:【】1.1学生成绩管理【】1.2考试报名管理【】1.3约瑟夫生者死者游戏【】1.4约瑟夫双向生死游戏【】2.1迷宫旅行游戏【】2.2八皇后问题【】2.3停车场管理【】...
  • 2.提供数据是二进制文件,读取二进制文件(.dat),并保存在文本文档(.txt)中操作; 3.该程序功能包括 1--读取文件(用户输入读取、保存路径); 2--插入(顺序插入、位置插入); 3--删除(根据LinkID删除); 4--查询...
  • 为什么要学数据结构

    万次阅读 多人点赞 2019-11-19 09:45:23
    一、前言 在可视化化程序设计的今天,借助于...1) 能够熟练地选择和设计各种数据结构和算法 2) 至少要能够熟练地掌握一门程序设计语言 3) 熟知所涉及的相关应用领域的知识 其中,后两个条件比较容易实现,而第一个...
  • 数据结构课程设计,用C语言编写的一个小程序,内附源码和文档
  • 用C语言编写的一个学籍管理系统,内附代码和文档
  • 数据结构课程设计-----学生会人员管理系统 C++ 南通大学 内附详细文档说明(即课程设计文档)+源代码
  • 班级考勤管理系统 数据结构 C语言

    千次阅读 热门讨论 2019-10-26 11:25:27
    程序概述 开发环境 开发程序的工具Microsoft Visual C++ 6.0,(简称...同时完全兼容C语言编程,它不但具有程序框架自动生成、灵活方便的类管理、代码编写和界面设计集成交互操作、可开发多种程序等优点。 基...
  • 数据结构课程设计文档是学生成绩管理系统。本系统界面友好,使用c语言编写。文档后面附有源代码。希望对大家有所帮助。
  • 数据结构课程设计.zip

    2019-06-06 18:09:36
    基于C/C++语言编写的停车场管理系统,包含了数据结构课程设计文档,答辩ppt,停车场管理系统.cpp源代码和停车场管理系统.exe可运行文件
  • 深刻的体会到了,MongoDB可以不设计集合的结构和数据类型即可使用,但不代表它不需要数据结构设计。一个好的系统运作,肯定需要对MongoDB的数据结构进行合理的设计才能高效运行。当然,我也不建议在业务初期就进行...
  • 这是大一做的一个课程设计,级别为优,因为加了很多课程以外的小操作以及考虑到了实际项目的运用,我把源码和演示文档及数据库都放在一起了,能直接使用,需要的链接自取: 项目答辩演示文档如下: ...
  • 学习数据数据结构的意义

    千次阅读 2018-12-31 14:09:05
    什么是数据结构,为什么要学习数据结构数据结构是否是一门纯数学课程?它在专业课程体系中起什么样的作用?我们要怎么才能学好数据结构?… 相信同学们在刚开始《数据结构》这门课的学习时,心里有着类似前面几个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,112,506
精华内容 445,002
关键字:

文件管理的数据结构

数据结构 订阅