课程设计——通讯录管理系统

整理了一下文件,找到了去年做课程设计的报告,保存一下代码,有一个说法:过了6个月再去看自己写的代码,如果觉得写的不好,就说明有了一点进步;这样说明应该还是有那么一点点进步~

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<conio.h>/*屏幕操作函数库*/
#define header1 "|***********************通讯录***********************|\n"
#define header2 "| 编号 |   姓名    |   电话号码     |     地址       |\n"
#define header3 "|---------|-----------------|-------------------------|-----------------------|\n"
#define end     "|-----------------------------------结束-----------------------------------|\n"
int input();
int show();
void dele();
void save();
int change();
int  cx();
int find1();
int find2();
int find3();
void quit();
///结构体//
struct telebook
{
    int num;
    char name[20];
    char phonenum[20];
    char addr[30];
};
void printheader() /*格式化输出菜单头*/
{
	printf(header1);
	printf(header2);
	printf(header3);
}

///
///通讯信息录入//
/
int input(struct telebook temp[])
{
    char sign,x[20];
    int i=0;
    FILE *fp;/*定义文件指针*/
    system("cls");
    if((fp=fopen("telebook.txt","ab+"))==NULL)/* 若读写打开二进制文件telebook.txt失败,则显示出错信息 */
  {
    printf("打开文件有误!");
       exit(0);
}

        while(sign!='n'&&sign!='N')
            { printf("\t编号:");
            scanf("\t%d",&temp[i].num);
            printf("\t姓名:");
            scanf("\t%s",temp[i].name);
            printf("\t电话号码:");
            scanf("\t%s",temp[i].phonenum);
            printf("\t通讯住址:");
            scanf("\t%s",temp[i].addr);
            gets(x);
      		printf("\n\t是否继续添加?(Y/N)");
      			scanf("\t%c",&sign);
      					i++;
                        }
            fwrite(&temp[i],sizeof(struct telebook),1,fp);
            fclose(fp);
        system("cls");
            return 0;
}


///通讯信息显示///
///
 int show(struct telebook temp[])
{
    int i;
	printheader();
	for(i=0;i<100;i++)
	{
	    if(temp[i].num=='\0') break;
        printf("%-10d%-20s%-20s%-20s\n",temp[i].num,temp[i].name,temp[i].phonenum,temp[i].addr);

	}
printf("-----------------------------------------------------\n");
	system("pause");
    system("cls");
 return 0;
}

//
///通讯信息删除/
/
void dele(struct telebook temp[])
{
    char s[20];
	int i=0,j;
   show (temp);
	printf("\t请输入想删除记录中的名字:");
	scanf("%s",s);
	for(i=0;i<100;i++)
        {
	if(strcmp(temp[i].name,s)==0)
        {

	for(j=i;j<20;j++)
	{
		temp[j]=temp[j+1];
	}
	printf("\t\t\t已经成功删除!\n");
	 getch();
                    system("cls");
			          return ;
	}
        }
    printf("\t通讯录中没有此人!\n");
	getch();
	system("cls");
}


///通讯信息保存

 void save(struct telebook temp[])
{
    int i;
    FILE*fp;
    if((fp=fopen("telebook.txt","w"))==NULL)
    {
        printf("cannot open this file\n");
        exit(0);
    }
    for (i=0;strlen(temp[i].name)!=0;i++)
fprintf(fp,"%d%s%s%s\n",temp[i].num,temp[i].name,temp[i].phonenum,temp[i].addr);
      fclose(fp);
}


///通讯信息修改///
/
int change(struct telebook temp[])
{
    char s[20];
   int i=0;
   show (temp);
    	printf("\t请输入想修改的记录中的名字:");
    		scanf("%s",s);
    		for(i=0;i<100;i++)
    		 	{if(strcmp(temp[i].name,s)==0)
                    {
                    printf("\t编号:");
                    scanf("\t%d",&temp[i].num);
                    printf("\t姓名:");
                    scanf("\t%s",temp[i].name);
                    printf("\t电话号码:");
                    scanf("\t%s",temp[i].phonenum);
                    printf("\t通讯住址:");
                    scanf("\t%s",temp[i].addr);
                    printf("\t修改成功!");
                     getch();
                    system("cls");
			          return 0;
     			        }
    		 	}
                {printf("\t通讯录中没有此人!\n");
    		 			return;}
    		 			getch();
    		 			system("cls");
}

///
///通讯信息查询//
//
int  cx(struct telebook temp[])
{
    int n,flag=1;
  printf("你想通过什么方式查找?\n");
  printf("\t1.编号\t\t2.姓名\t\t3.电话号码\t4.返回\n");
  scanf("%d",&n);
  do{
        if(n==1) {find1(temp);return;}
   if(n==2) {find2(temp);return;}
   if(n==3) {find3(temp);return;}
   if(n==4) {
        system("cls");
        return ;}
    else{
       flag=0;
        printf("输入不正确,请重新输入:");
        scanf("%d",&n);
        }
  }
  while(flag==0);
 return 0;
}
/
///按编号查询

int find1(struct telebook temp[])
{

    int i=0,s=0;
        printf("\t请输入想查询的编号:");
        scanf("%d",&s);
        for(i=0;i<100;i++)
        {
        if(temp[i].num=s)
            {
            printheader();
    		 printf("%-10d%-20s%-20s%-20s\n",temp[i].num,temp[i].name,temp[i].phonenum,temp[i].addr);
    		 getch();
         system("cls");
			return 0;
            }
        }
            printf("\t通讯录中没有此人!\n");
                    getch();
                    system("cls");
                    return 1 ;
}
//
///按姓名查询
///
int find2(struct telebook temp[])
{
       char s[20];
       int i=0;
        printf("\t请输入想查询的姓名:");
        scanf("%s",s);
         for (i=0;i<100;i++)
		 {
		  if(strcmp(temp[i].name,s)==0)
            {
    		printheader();
    		 printf("%-10d%-20s%-20s%-20s\n",temp[i].num,temp[i].name,temp[i].phonenum,temp[i].addr);
            getch();
         system("cls");
			return 0;
			}
		 }
         printf("\t通讯录中没有此人!\n");

         getch();
         system("cls");
         return 1;

}
///
///按电话号码查询///
/
int  find3(struct telebook temp[])
{

    char s[20];
    int i=0;
        printf("\t请输入想查询的电话:");
        scanf("%s",s);
        for (i=0;i<100;i++)
        {
        if(strcmp(temp[i].phonenum,s)==0)
            {
            printheader();
    		 printf("%-10d%-20s%-20s%-20s\n",temp[i].num,temp[i].name,temp[i].phonenum,temp[i].addr);
    		 getch();
         system("cls");
			return 0;
            }
        }
    printf("\t通讯录中没有此人!\n");
                    getch();
                    system("cls");
                    return 1;
}
/
退出/
void quit()
{   printf("\n");
    printf("\n");
    printf("\t\t★★★★★★★★★★★★★★★★★★★★★\n");
    printf("\t\t★★★★★★★感谢您的使用★★★★★★★★\n");
    printf("\t\t★★★★★★★欢迎再次使用★★★★★★★★\n");
    printf("\t\t★★★★★★★★★谢谢★★★★★★★★★★\n");
    exit(0);
    getch();
    system("cls");
}
///
///主函数//
//
int main()
 {
 struct telebook mess[100];
 char xx;
 system("color 2E");/*改变控制台颜色*/
 while(1)
 {
  printf("\t      ★☆★☆★【欢迎进入通讯录管理系统】★☆★☆★\n");
  printf("\t\t******************menu********************\n");
  printf("\t\t┌───────────────────┐\n");
  printf("\t\t\t ●a、	通讯信息录入\n");
  printf("\t\t\t ●b、	通讯信息显示\n");
  printf("\t\t\t ●c、	通讯信息保存\n");
  printf("\t\t\t ●d、	通讯信息删除\n");
  printf("\t\t\t ●e、	通讯信息修改\n");
  printf("\t\t\t ●f、	通讯信息查询\n");
  printf("\t\t\t    ◆Ⅰ、按编号查询\n");
  printf("\t\t\t    ◆Ⅱ、按姓名查询\n");
  printf("\t\t\t    ◆Ⅲ、按电话号码查询\n");
  printf("\t\t\t ●g、	退出系统\n");
  printf("\t\t└───────────────────┘\n");
  printf("\t\t******************************************\n");
  printf("请输入您的选择\n");
  scanf("%c",&xx);
  getchar();
  system("cls");
switch(xx)
{
case 'a':input(mess);break;
case 'b':show(mess);break;
case 'c':save(mess);break;
case 'd':dele(mess);break;
case 'e':change(mess);break;
case 'f':cx(mess);break;
case 'g':quit();break;
default:return 0;
}
getchar();
 }
return 0;
}
写的有点简陋,只是用来对照自己的学习状态,和以前进行比较,看现在有没有进步~ 以自己的过去为镜,时时激励自己!!!


  • 11
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
一:需求分析 二:总体设计 三:详细设计 四:调试与测试 五;测试结果 六:本次课程设计的心得体会 七:附录 本程序设计亮点介绍(及)改进方面 1.在修改函数中,可以实现单条记录修改(运用switch) 2.查询函数中,能返回该函数继续查询(运用了递归) 3.使用变量少,仅通过变量i的递加和表示成员数的变量n就实现了数据结构体之间的联 系 4.界面美观,使用方便 5.允许编号输入为字符 6.在显示函数上能够分屏显示(换页) 缺点 在输入数据时,未输完一个成员的所有信息不能退出输入 一:需求分析 A.需要实现的功能有:输入功能、输出功能、显示功能、查找功能、以及增加、删 除、修改功能。输入功能要求一次完成若干信息的输入;显示功能要能完成所有信息的 显示,并且自动分页;查找可以通过多种方式进行。 按需求的功能,该设计出输入函数、输出函数、显示函数、查找函数、修改函数。另 需要一个标准界面。 B.数据存储问题 这个系统数据庞大复杂,需要需要适当用数组,循环,结构体,文件操作等基本 语句及稍有难度的语句。因此要求我们熟练掌握结构化程序设计的基本思路和方法,在 所掌握的基本知识和技能的基础上,进一步提高自学能力和查找资料的能力,解决一定 程度的复杂的结构化程序设计问题,加深对所学知识的理解与掌握,利用自己所学知识 解决实际问题的能力,为以后的程序开发打下基础。 二:总体设计 主要结构图示 本程序由主函数和多个子函数组成,可执行多种数据管理的功能。具体通过c语言中 结构体数组来实现。主函数主体为定义的结构体,和一个switch函数,以提供多种程序 操作功能。 主要需运用到结构体数组、文件、函数等内容知识。 子函数有六个,分别负责添加、显示、删除、查询、修改、保存的功能。通过变量i使结 构体数组之间达成数据链表的功能,利用该方法主要考虑到成员中对于结构体指针尚未 熟练掌握,而这种方法更加便捷易懂。 子函数功能介绍 1. 添加:输入成员信息,依次输入编号、姓名、QQ、电话号码、单位、电子邮箱、身 份。 2. 显示:以表格形式输出所有通讯记录 3. 删除:只需输入该成员姓名,便删除其所有记录 4. 查询:可选用姓名、电话、单位身份4种方式来查询 5. 修改:输入该成员姓名后,再依次输入更新信息完成修改 6. 保存:输入文件名(带后缀)后保存。C-free中会默认以txt文件保存至c- free standard/temp文件夹中 三:详细设计 1. 主函数 完成变量的初始化与函数的定义之后,运用for( ; ; )来开启一个无限循环。循环内有switch函数来实现函数的选择功能,case1、case2等分 别执行不同的函数操作,每个函数中调用了相的函数,并采用函数system("pause") ;暂停等待按键。在case6中采用函数exit(0)跳出循环。 下面在讲一下主函数中定义的n的作用,n的初值是1,当执行完case1中的函数input ( )后返回值为n+i,i为输入的成员数,返回值重新赋给n,n变为成员数,从而确定了之后 display()等函数循环中的终止条件。 2. 分函数 【1】添加 【2】显示 【3】删除 【4】查询 【5】修改 保存函数:【1】定义一个文件指针fp 【2】输入想创建的文件名称,如filename 【3】开辟文件,用fopen以"写"的方式打开,并把fp指针指向该文件 【4】在文件中输入信息 【5】保存(即fclose(filename)) 查询函数:运用了if来实现选择,并通过递归返回继续查询。 注:身份以及单位的查询方式有所不同,单位只能查找一条符合的记录,而按身份查询 可显示所有符合的信息。若查找不到,则返回继续查询,选择5返回则退出查询。 四:调试与测试 我们编写的函数具有一定的容错能力。具体表现为 【1】如select函数中输入0-6以外的数,则循环继续进行,直到输入0-6为止 【2】sign!='n'&&sign!='N'语句保证了大小写不会影响结果 【3】while(m!='1'&&m!='2'&&m!='3'&&m!='4') { printf("输入错误,请重新选择:"); scanf("%c",&m); }保证了输入正确 【4】当输入的成员信息错误时,可通过修改函数进行改动 五:测试结果 1.主函数运行正常。通过for语句是界面循环,并有switch及system函数进行配合调节 达到目的。(界面显示如下) 2.测试结果:运行正常,达到了预订的目标。 此处为通过保存函数保存后的txt文本中的学生信息 六:心得 课程设计一个不断学习、思考、编写、修改的过程。它对我们的能力提出了挑战。 我不仅意识到c语言基础的重要性,更意识到了自学能力的重要性,同学学习书本,查找 资料等多种途径来构建思

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值