• C语言ll作业01


    这个作业属于哪个课程 班级链接
    这个作业要求在哪里 作业链接
    这个作业的目标 学会用结构体写菜单通讯录等程序
    其他参考文献1 清屏函数
    其他参考文献2 全局or局部变量讲解
    作业正文 本篇博客

    1.1 需求分析

    • 1、对应不同功能需要使用多个函数对数据进行处理,所以首先需要制作一个菜单。
    • 2、删除以及查找功能需要判断是否存在数据,所以需要额外做一个判断程序。
    • 3、大致思路为结构体+指针+自定义函数+选择菜单=通讯录。
    • 4、参考资料中给出了清屏函数与各类变量等资料,大概率需要使用,尽量使程序完善。

    1.2 程序代码

    #include <stdio.h>
    #include <stdlib.h>
    #include <windows.h>
    int g=0,max=50;
    
    typedef struct person
    {
    	int N;
    	char name[20];
    	char t[20];
    }people;
    
    typedef struct all
    {
    	struct person people[50];
    	int x;
    }all;
    
    struct all MY_addressbook;
    
    void caidan();
    void Add(all*p);
    void Delete(all*p);
    void Search(all*p);
    void Change(all*p);
    void paixu(all*p); 
    
    
    
    
    int main()
    {
    	MY_addressbook.x=0;
    	caidan();
    	return 0;
    } 
    void menu()
    {
    	printf("=====================通讯录=====================
    ");
    	printf("=====                界面                   =====
    ");
    	printf ("人数:%d人                        |剩余空间:%d人
    ",g,max); 
    	for(int i=0;i<50;i++)
    	{
    		if (MY_addressbook.people[i].N!=0)
    		printf("编号:%d       |姓名:%s        |电话:%s
    ",MY_addressbook.people[i].N,MY_addressbook.people[i].name,MY_addressbook.people[i].t);
    	}
    	printf("操作列表:
    ");
    	printf("=====   1)排序      2)添加      3)删除    =====
    ");
    	printf("=====   4)修改      5)查找      6)退出程序=====
    ");
    
    }
    
    void caidan()
    {
    	int a=0;
    	do
    	{
    	    menu();
    	    printf("请输入操作;
    ");
        	scanf("%d",&a);
    	    switch(a)
    	    {
    		case 1:
    		    paixu(&MY_addressbook);
    		 	system("cls");
    		    break;
    		case 2:
    			Add(&MY_addressbook);
    			system("cls");
    			break;
    		case 3:
    			Delete(&MY_addressbook);
    			system("cls");
    			break;
    		case 4:
    			Change(&MY_addressbook);
    			system("cls");
    			break;
    		case 5:
    			Search(&MY_addressbook);
    			system("cls");
    			break;	
    		case 6:
    			exit(0);
    		    break;
    		default :
    		    printf("Error!!!
    错误操作指令, 请重新输入
    ");
    			break;
    	    }
        }while(a);
    }
    
    void Add(all*p)
    {
    	int m;
    	printf("请输入添加位置:");
    	scanf("%d",&m);
        p->people[p->x].N=m;
        if(m>50||m<=0)
    	{
    		printf("处理编号超过阈值!
    ");	
    	}
    	else
    	{
    		printf("请输入联系人姓名:");
    		scanf("%s",&p->people[p->x].name);
    		printf("请输入联系人电话:");
    		scanf("%s",&p->people[p->x].t);
    		g++;max--;
    	}
    	p->x++;
    }
    
    
    
    
    int FindEntry(all*p,char *name)
    {
    	for(int i=0;i<(p->x);i++)
    	{
    		if(strcmp(p->people[i].name,name)==0)
    		{
    			return i;
    		}
    		if(i==p->x)
    		{
    			return 1;
    		}
    	}
    }
    
    void Search(all*p)
    {
    	int flag;
    	char name[10]={0};
    	printf("请输入你要查找联系人的姓名:");
    	scanf("%s",&name);
    	flag=FindEntry(p,name);
    	if(flag==1)
    	{
    		printf("查无此人!
    ");
    	}
    	else
    	{
    		printf("编号:%d     |姓名:%s     |电话:%d
    ",p->people[flag].N,p->people[flag].name,p->people[flag].t);
    	}
    }
    
    
    void Delete(all*p)
    {
    	int flag;
    	char name[10]={0};
    	printf("请输入删除联系人:
    ");
    	scanf("%s",&name);
    	flag=FindEntry(p,name);
    	if(flag==1)
    	{
    		printf("此处无数据!
    ");
    	}
    	else
    	{
    		for(int j=flag;j<p->x;j++)
    		{
    			p->people[j]=p->people[j+1];
    		}
    		printf("删除成功!
    ");
    		g--;max++; 
    	}
    	p->x--;
    }
    
    
    void Change(all*p)
    {
    	int flag;
    	char n[10]={0};
    	printf("请输入修改联系人:
    ");
    	scanf("%s",&n);
    	flag=FindEntry(p,n);
    	if(flag==1)
    	{
    		printf("此处无数据!
    "); 
    	}
    	else
    	{
    		printf("请重新输入编号:
    ");
    		scanf("%d",&p->people[flag].N);
    		printf("请重新输入姓名:
    ");
    		scanf("%s",&p->people[flag].name);
    		printf("请重新输入电话:
    ");
    		scanf("%s",&p->people[flag].t);
    	}
    }
    
    
    void paixu(all*p)
    {
    	int i,j,k;
    	printf("请选择排序的方式:");
    	printf("1)编号排序  2)姓名排序");
    	scanf("%d",&k);
    	switch(k)
    	{
    		case 1:
    		for(i=0;i<(p->x-1);i++)
    		{
    			for(j=0;j<(p->x-i-1);j++)
    			{
    				if(p->people[j].N  >  p->people[j+1].N)
    				{
    					people q;
    					q=p->people[j];
    					p->people[j]=p->people[j+1];
    					p->people[j+1]=q;
    				}
    			}
    		}
    		break;
    		case 2:
    		for(i=0;i<(p->x-1);i++)
    		{
    			for(j=0;j<(p->x-i-1);j++)
    			{
    				if(strcmp(p->people[j].name,p->people[j+1].name)<0)
    				{
    					people q;
    					q=p->people[j];
    					p->people[j]=p->people[j+1];
    					p->people[j+1]=q;
    				}
    			}
    		}
    		break;
    		default :
    		printf("输入错误,请重试。");
    		break;
    		
    	}
    }
    
    

    1.3 函数调用图与流程图

    1.4 功能测试

    • 添加操作

    • 删除操作

    • 修改操作

    • 排序操作



    1.5 应用集成

    仓库链接

  • 相关阅读:
    mysql
    jQuery选择器
    使用JavaScript操作DOM节点元素的常用方法(创建/删除/替换/复制等)
    MVC2.0==>MVC3.0
    sql 邮件发送测试情况
    C#调用存储过程
    设计模式
    sql 分页
    SQL Server 存储过程(转载)
    sqlitehelper封装
  • 原文地址:https://www.cnblogs.com/solokill/p/12786659.html
Copyright © 2020-2023  润新知