c程序设计-通讯录

该文章描述了一个使用C语言编写的班级通讯录管理系统,包括学生个人信息的输入、显示、插入、删除、查看和修改等功能。系统采用结构体存储学生信息,通过指针处理链表数据结构。文章还提到了程序调试中常见的错误,如未初始化的指针、switch语句的使用规范等,并提供了相应的解决方案。
摘要由CSDN通过智能技术生成
  • 需求分析:

1.设计题目:c语言课程设计通讯录

2.系统功能需求分析:对学生个人信息的搜集和查找

  • 概要设计:

系统总体设计框架

  • 调试分析过程描述:包括测试数据,测试分析结果,以及对程序调试过程中存在问题的思考(列出主要问题的出错现象、出错原因、解决方法及效果等)
  • 使用未初始化的指针,指针定义后未赋值就引用。如果在定义时不知道赋什么值,可以用p=NULL赋初值.
  • 分不清p和*p。前者是指针,即地址,后者表示指针所间接引用的数据,但如果是二级指针或多级指针,取*以后得到的仍然可能是地址。
  • switch()语句中的格式不正确。()中的表达式结果一定是一些明确的值,不是区间;表达式的所有可能结果要列在case后边,case与常量之间有一空格,丢掉必要的 break.
  • 程序在函数定义中的函数名后应该没有“;”.每一条语句的后边都要加分号,函数名后边不加分号.
  • 数组的定义与引用方式不正确,字符串的输入有错误:主要表现在使用scanf()或gets()时加了&,或输入字符串时用循环.
  • 测试结果:列出所有功能的运行界面,并作文字说明。

输入数据:

显示数据:

插入数据:

删除数据:

查看数据:

修改数据:

保存数据:

程序代码

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<windows.h>
typedef struct student     //定义结构体
 {
     char name[20];    //姓名
    char num[15];      //学号
     char sex[10];     //性别
     char from[20];    //籍贯
    char political[10];    //政治面貌
     char phone[15];      //手机号
     char QQ[15];         //QQ号
     char dorm[10];     //宿舍
     struct student *next;  //结构体指针
 }stu;
 stu *head;
 
void print()    //主菜单
 {
 system("cls");
      printf("\n\n\n");
     printf("      ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n");
      printf("      ***********************************************************\n");
     printf("      \t\t\t班级通讯录管理系统\n");
      printf("\n");
      printf("      \t\t1. 输入数据");
     printf("\t\t2. 显示数据\n");
      printf("      \t\t3. 插入数据");
      printf("\t\t4. 删除数据\n");
      printf("      \t\t5. 查看数据");
      printf("\t\t6. 修改数据\n");
     printf("      \t\t7. 保存数据");
      printf("\t\t8. 返回主菜单\n");
      printf("      ***********************************************************\n");
      printf("      ~~~~~退~~~~~~~~~~出~~~~~~~~~~请~~~~~~~~~~按~~~~~~~~~~9~~~~~\n");
      printf("      -----------------------------------------------------------\n\n");
  }
 
 
  void input(stu *p1)    //输入相关数据
 {
      printf("姓名:");
      scanf("%s",&p1->name);
      printf("学号:");
      scanf("%s",&p1->num);
     printf("性别:");
      scanf("%s",&p1->sex);
      printf("籍贯:");
      scanf("%s",&p1->from);
      printf("政治面貌:");
      scanf("%s",&p1->political);
      printf("手机号:");
      scanf("%s",&p1->phone);
      printf("QQ号:");
    scanf("%s",&p1->QQ);
     printf("宿舍:");
     scanf("%s",&p1->dorm);
  }

  
  stu * inputdata()     //数据输入的函数
  {
      stu *p1,*p2;
      int i=1;
    p1=(stu *)malloc(sizeof(stu));
      if(p1!=NULL)
      {
          head=p1;
          printf("\n\t\t\t☆☆☆输入数据☆☆☆\n");
          printf("------------------------------------------------------------------\n");
          printf("在姓名处输入“ok”代表输入数据结束\n");
          while(i)
          {
              printf("姓名:");
             scanf("%s",&p1->name);
              if(strcmp(p1->name,"ok")==0)
             {
                  printf("\n输入完毕!\n");
                  printf("========================================================================\n");
                  i=0;
                 p2->next=NULL;
                  free(p1);
                 p1=p2;
              }
             else
            {
                 printf("学号:");
                 scanf("%s",&p1->num);
                 printf("性别:");
                 scanf("%s",&p1->sex);
                 printf("籍贯:");
                 scanf("%s",&p1->from);
                  printf("政治面貌:");
                  scanf("%s",&p1->political);
                 printf("手机号:");
                 scanf("%s",&p1->phone);
                   printf("QQ号:");
                   scanf("%s",&p1->QQ);
                  printf("宿舍:");
                  scanf("%s",&p1->dorm);
                  printf("=====================================\n");
                  p2=p1;
                  p1=(stu *)malloc(sizeof(stu));
                  if(p1!=NULL)
                  {
                      p2->next=p1;
                  }
			 }
          }
          return(p1->next);
      }
  }

  
  stu * lookdata(stu *p1)     //查看数据的函数
  {
      printf("\n\t\t\t☆☆☆显示数据☆☆☆\n");
      printf("----------------------------------------------------------------------\n");
      while(p1!=NULL)
      {
          printf("姓名:%s\n",p1->name);
          printf("学号:%s\t",p1->num);
          printf("性别:%s\t",p1->sex);
          printf("籍贯:%s\t",p1->from);
          printf("政治面貌:%s\t",p1->political);
          printf("手机号:%s\t",p1->phone);
          printf("QQ号:%s\t",p1->QQ);
          printf("宿舍:%s\n",p1->dorm);
          printf("======================================================================\n");
          p1=p1->next;
      }
      return p1;
  }
 
  
  void insert()      //插入数据
  {
      int i;
      char named[20];
      stu *p1,*p2,*p3;
      p1=head;
      p3=(stu *)malloc(sizeof(stu));
      p3->next=NULL;
      printf("\n\t\t\t☆☆☆插入数据☆☆☆\n");
      printf("----------------------------------------------------------------------\n");
      printf("请输入插入者的资料:\n");
      input(p3);
      printf("\n插入选项\n");
      printf("1.首位置插入\t2.尾位置插入\t3.前插\n");
      printf("请输入你的选择:");
      scanf("%d",&i);
      switch(i)
{
      case 1:p3->next=p1;
          head=p3;
          break;
      case 2:while(p1->next!=NULL)
             {
                 p2=p1;
                 p1=p1->next;
             }
          p1->next=p3;
          break;
      case 3:printf("请输入姓名(前插):");
          scanf("%s",named);
          while(strcmp(named,p1->name)!=0)
          {
              p2=p1;
              p1=p1->next;
          }
          p2->next=p3;
          p3->next=p1;
          break;
      }
      printf("插入成功!\n");
      printf("======================================================================\n");
       return;
}
 
  void deleted()          //删除数据
{
      stu *p1,*p2;
      char Name[20];  //想要删除的人的姓名
      printf("\n\t\t\t☆☆☆删除数据☆☆☆\n");
      printf("----------------------------------------------------------------------\n");
      printf("请输入要删除的姓名:");
      scanf("%s",Name);
      p1=head;
      if(head==NULL)
{
      printf("内存空空神马都没有!\n");
      printf("======================================================================\n");
      return;
}
      if(strcmp(Name,p1->name)==0)
{
      head=p1->next;
      printf("删除成功!\n");
      printf("======================================================================\n");
      return;
      }
      while(p1!=NULL&&(strcmp(Name,p1->name)!=0))
      {
      p2=p1;
      p1=p1->next;
      }
      if(p1==NULL)
      {
      printf("此人不存在!\n");
      printf("======================================================================\n");
      return;
      }
      if(p1->next!=NULL)
      {
      p1=p1->next;
      p2->next=p1;
      printf("删除成功!\n");
      printf("======================================================================\n");
      return;
      }
      else
{
      p2->next=NULL;
      printf("删除成功!\n");
      printf("======================================================================\n");
      return;
}
  }

  
  find(stu *p2)        //通过姓名查找查看数据的函数
{
      char name[20];
      int b=0;
      printf("\n\t\t\t☆☆☆查看数据☆☆☆\n");
      printf("----------------------------------------------------------------------\n");
      printf("请输入您想查找人的姓名:");
      scanf("%s",name);
      while(p2!=NULL)
{
          if(strcmp(name,p2->name)==0)
          {
              printf("你要找到的数据\n");
              printf("姓名:%s\n",p2->name);
              printf("学号:%s\t",p2->num);
              printf("性别:%s\t",p2->sex);
              printf("籍贯:%s\t",p2->from);
              printf("政治面貌:%s\t",p2->political);
              printf("手机号:%s\t",p2->phone);
              printf("QQ号:%s\t",p2->QQ);
              printf("宿舍:%s\n",p2->dorm);
              printf("======================================================================\n");
              b=1;
}
          p2=p2->next;
}
      if(b==0)
{
          printf("\n您要查找的人不存在!\n");
}
}
 
  
  update(stu *p2)   //通过姓名查找修改数据
{
      char name[20];
      int b=0,i;
      printf("\n\t\t\t☆☆☆修改数据☆☆☆\n");
      printf("----------------------------------------------------------------------\n");
      printf("请输入将要修改人的姓名:");
        scanf("%s",name);
      while(p2!=NULL)
      {
          if(strcmp(name,p2->name)==0)
          {
              printf("该同学的基本信息\n");
              printf("姓名:%s\n",p2->name);
              printf("学号:%s\t",p2->num);
               printf("性别:%s\t",p2->sex);
              printf("籍贯:%s\t",p2->from);
              printf("政治面貌:%s\t",p2->political);
              printf("手机号:%s\t",p2->phone);
              printf("QQ号:%s\t",p2->QQ);
              printf("宿舍:%s\n",p2->dorm);
              printf("\n请选择要修改的信息\n");
              printf("\t1.姓名\t2.学号\t3.性别\t4.籍贯\n\t5.政治面貌\t6.手机号\t7.QQ\t8.宿舍\n");
              printf("\n您的选择是(1~8):");
              scanf("%d",&i);
              printf("请输入修改之后的内容\n");
              switch(i)
{
              case 1:printf("姓名:");
                  scanf("%s",&p2->name);
                  break;
              case 2:printf("学号:");
                  scanf("%s",&p2->num);
                  break;
              case 3:printf("性别:");
                  scanf("%s",&p2->sex);
                  break;
              case 4:printf("籍贯:");
                  scanf("%s",&p2->from);
                  break;
              case 5:printf("政治面貌:");
                  scanf("%s",&p2->political);
                  break;
              case 6:printf("手机号:");
                  scanf("%s",&p2->phone);
                  break;
              case 7:printf("QQ:");
                  scanf("%s",&p2->QQ);
                  break;
              case 8:printf("宿舍:");
                  scanf("%d",&p2->dorm);
                  break;
}
              printf("\n修改成功!\n");
              printf("=========================================================================\n");
              b=1;
}
          p2=p2->next;
}
      if(b==0)
{
          printf("没有找到该人的资料!\n");
}
}

  
  save(stu *p2)   //保存数据
{
      FILE *fp;
      char file[15];
      printf("\n\t\t\t☆☆☆保存数据☆☆☆\n");
      printf("----------------------------------------------------------------------\n");
      printf("输入文件名:");
      scanf("%s",file);
      if((fp=fopen(file,"w"))==NULL)
{
          printf("cannot open this file\n");
          exit(0);
}
      fprintf(fp,"姓名\t学号\t性别\t籍贯\t政治面貌\t手机号\tQQ号\t宿舍\n");
      while(p2!=NULL)
{
          fprintf(fp,"%s\t",p2->name);
          fprintf(fp,"%s\t",p2->num);
          fprintf(fp,"%s\t",p2->sex);
          fprintf(fp,"%s\t",p2->from);
          fprintf(fp,"%s\t",p2->political);
          fprintf(fp,"%s\t",p2->phone);
          fprintf(fp,"%s\t",p2->QQ);
          fprintf(fp,"%s\n",p2->dorm);
          p2=p2->next;
}
      printf("\n保存成功!\n");
      printf("======================================================================\n");
      fclose(fp);
}
 
 
 void screen()  
{
     int i;
     char s[251]={"欢迎使用由陈泳浩制作班级通讯录管理系统,\n\n\t\t\t本系统用于通讯录管理----排序,打印\n\n\n\t\tWelcome to use produced by YongHao Chen class address book\n\n\t\t management system,sorting,printing"};
     
     printf("\n================================================================================\n");
    printf("\n\n\n\t\t\t");
    for(i=0;s[i]!=NULL;i++)
    {
        Sleep(30);
         printf("%c",s[i]);
     }
     printf("\n\n\n\n\n\n\n\n\t\t ~ Hi~ o(* ̄▽ ̄*)ブ~ ~ ~祝您使用愉快~ ~\n");
     printf("================================================================================\n");
 
}
 

 void main()
 {
     int i;
     system("color 4e");
     screen();
     Sleep(3000);
     print();
     while(1)
     {
         printf("请输入你的选择(1~9):");
         loop:scanf("%d",&i);
         if(i<1||i>9)
         {
            printf("输入有误,请在1~9中进行选择:");
             goto loop;
        }
         switch(i)
         {
         case 1:
            inputdata();
             break;
         case 2:
             lookdata(head);
             break;
         case 3:
            insert();
             break;
        case 4:
              deleted();
             break;
        case 5:
            find(head);
             break;
        case 6:
             update(head);
             break;
         case 7:
             save(head);
            break;
        case 8:
             print();
            break;
         case 9:
            exit(1);
             break;
        }
     }
 }

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
C语言编写的通讯录管理程序设计 #include"stdio.h" #include"stdlib.h" #include"string.h" #include"conio.h" #define HEADER1"------------------------------------------MESSAGE MENU--------------------------------------------------------------\n" #define HEADER2" | num | name | phonenumber | address |\n" #define HEADER3" |-------------------------------------------------------------------|\n" #define FORMAT " | %-10s %-10s %-15s %-20s |\n" #define DATA p->num,p->name,p->phonenum,p->address #define END " ------------------------------------------------------------------------------------------------------------------\n" #define N 100 int saveflag=0; /*是否需要存盘的标志变量*/ typedef struct record /*标记为record*/ { char num[4]; /*编号*/ char name[10]; /*姓名*/ char phonenum[15]; /*电话*/ char address[20]; /*地址*/ } RECORD; RECORD tele[N]; void menu(); void Disp(); void Qur(); void Modify(); void SelectSort(); void Wrong(); void Save(); void main() { RECORD tele[N]; /*定义RECOED结构体*/ FILE *fp; /*文件指针*/ int select; /*保持内选择结果变量*/ char ch; /*保存y,Y,n,N*/ int count=0; /*保存文件中的记录条数(或元素个数)*/ fp=fopen("C:\\record.txt","a+"); /*以追加方式打开文本文件c;\record,可读可写,若此文件不存在,会创建此文件*/ if(fp==NULL) { printf("\n=>Can not open file!\n"); exit(0); } while(!feof(fp)) { if(fread(&tele[count],sizeof(RECORD),1,fp)==1) /*一次从文件中读取一条通讯记录*/ count++; } fclose(fp); /*关闭文件*/ printf("\n=>Open file success,the total records number is:%d.\n",count); getchar(); menu(); while(1) { system("cls"); menu(); cprintf("\n Please input your choice(0-8):"); /*显示提示信息*/ ch=getch(); if(ch=='0') { if(saveflag==1) /*若对数组的数据有修且未进行存盘操作,则此标志为1*/ { getchar(); printf("\n==>Whether save the modified record to file?(y/n):"); scanf("%c",&ch); if(ch=='y'||ch=='Y') Save(tele,count); } printf("\n=>Thank you for useness!"); getchar(); break ; } switch(ch) { case'0':break; case'1':count=Add(tele,count);break; /*增加通讯记录*/ case'2':system("cls");Disp(tele,count);break; /*显示通讯记录*/ case'3':count=Del(tele,count) ;break; /*删除通讯记录*/ case'4':Qur(tele,count);break; /*查询通讯记录*/ case'5':Modify(tele,count);break; /*修改通讯记录*/ case'6':count=Insert(tele,count);break; /*插入通讯记录*/ case'7':SelectSort(tele,count);break;/*排序通讯记录*/ case'8':Save(tele,count);break; /*保存通讯记录*/ default: Wrong();getchar();break; /*按键有误,必需为0~8*/ } } } void menu() { system("cls"); /*调用DOS命令清屏,与clrscr()功能相同*/ textcolor(63); /*在文本模式中选择新的字符颜色*/ gotoxy(10,5); /*在文本窗口中设置光标*/ printf(" The communication management system\n"); gotoxy(10,8); printf(" ****Menu**** \n"); gotoxy(10,9); printf("\n"); gotoxy(10,10); printf("\* 1. Add record\n"); /*增加*/ gotoxy(10,11); printf("\* 2. Display record\n"); /*展览*/ gotoxy(10,12); printf("\* 3. Delete record\n"); /*删除*/ gotoxy(10,13); printf("\* 4. Search record\n"); /*查找*/ gotoxy(10,14); printf("\* 5. Modify record\n"); /*更改*/ gotoxy(10,15); printf("\* 6. Insert record\n"); /*插入*/ gotoxy(10,16); printf("\* 7. Sort record\n"); /*整理*/ gotoxy(10,17); printf("\* 8. Save record\n"); /*保存*/ gotoxy(10,18); printf("\* 0 Quit system\n"); /*退出*/ gotoxy(10,19); printf(" ************ \n"); /*cprintf()送格式话输出至文本窗口屏幕中*/ } /*格式化输出表头*/ void printheader() { printf(HEADER1); printf(HEADER2); printf(HEADER3); } /*格式化输出表中数据*/ void printdata(RECORD q) { RECORD *p; p=&q; printf(FORMAT,DATA); } void Disp( RECORD temp[],int n) /*显示数组temp[]中存储的通讯记录,内容为record结构中定义的内容*/ { int i; if(n==0) /*表示没有通讯记录*/ { printf("\n=>No menu record!\n"); getchar(); return ; } printf("\n\n"); printheader(); /*输出表格头部*/ i=0; while(i<n) /*逐条输出数组中存储的通讯记录*/ { printdata(temp[i]); i++; printf(HEADER3); } getchar(); } void Wrong() /*输出按键错误信息*/ { printf("\n\n\n\n\n**********Error:input has wrong! press any key to continue***********\n"); getchar(); } void Nofind() /*输出未查找到此记录的信息*/ { printf("\n=>Not find this menu record!\n"); } int Locate(RECORD temp[],int n,char findmess[],char nameorphonenum[]) { int i=0; if(strcmp(nameorphonenum,"phonenum")==0) /*按电话号码查询*/ { while(i<n) { if(strcmp(temp[i].phonenum,findmess)==0) /*若找到findmess值的电话号码*/ return i; i++; } } else if(strcmp(nameorphonenum,"name")==0) /*按姓名查询*/ { while(i<n) { if(strcmp(temp[i].name,findmess)==0) /*若找到findmess值的姓名*/ return i; i++; } } return -1; /*若未找到,返回一个整数-1*/ } void stringinput(char *t,int lens,char *notice) { char n[255]; do { printf(notice); /*显示提示信息*/ scanf("%s",n); /*输入字符串*/ if(strlen(n)>lens) printf("\n Exceed the required length! \n"); /*进行长度检测,超过lens值重新输入*/ } while(strlen(n)>lens); strcpy(t,n); /*将输入发字符串拷贝到字符串t中*/ } int Add(RECORD temp[],int n) /*增加通讯记录*/ { char ch,num[10]; int i,flag=0; system("cls"); Disp(temp,n); /*先打印出已有的通讯录信息*/ while(1) /*一次可输入多条记录,直至输入编号为0的记录才结束添加操作*/ { while(1) /*输入记录编号,保证该编号没有被使用,若输入编号为0,则退出添加记录操作*/ { stringinput(num,10,"Input number(press '0' return menu):"); /*格式化输入编号并检验*/ flag=0; if(strcmp(num,"0")==0) /*输入为0,则退出添加操作,返回主界面*/ { return n; } i=0; while(i<n) /*产寻该编号是否已经存在,若存在则要求重新输入一个未被占用的编号*/ { if(strcmp(temp[i].num,num)==0) { flag=1; break; } i++; } if(flag==1) /*提示拥护是否重新输入*/ { getchar(); printf("==>The number %s is existing,try again?(y/n):",num); scanf("%c",&ch); if(ch=='y'||ch=='Y') continue; else return n; } else {break;} } strcpy(temp[n].num,num); /*将字符串num拷贝到temp[n].num中*/ stringinput(temp[n].name,15,"Name:\n"); stringinput(temp[n].phonenum,15,"Telephone:\n"); stringinput(temp[n].address,15,"Address:\n"); saveflag=1; n++; } return n; } void Qur(RECORD temp[],int n) /*按编号或姓名查询通讯记录*/ { int select; /*按1:按姓名查,2:按电话号码查,其他:返回住界面(菜单)*/ char searchinput[20]; /*包寻用户输入的查询内容*/ int p=0; if(n<=0) /*若数组为空*/ { system("cls"); printf("\n=>No menu record!\n"); getchar(); return ; } system("cls"); printf("\n =>1 Search by name =>2 Search by telephonenumber\n"); printf(" Please choice[1,2]:"); scanf("%d",&select); if(select==1) /*按姓名查询*/ { stringinput(searchinput,10,"Input the existing name:"); p=Locate(temp,n,searchinput,"name"); /*在数组temp中查找编号为searchinput值的元素,并返回该数组元素的下标值*/ if(p!=-1) /*若找到该记录*/ { printheader(); printdata(temp[p]); printf(END); printf("Press any key to return"); getchar(); } else Nofind(); getchar(); } else if(select==2) /*按电话号码查询*/ { stringinput(searchinput,15,"Input the existing telephone number:"); p=Locate(temp,n,searchinput,"phonenum"); if(p!=-1) { printheader(); printdata(temp[p]); printf(END); printf("Press any key to return"); getchar(); } else Nofind(); getchar(); } else Wrong(); getchar(); } int Del(RECORD temp[],int n) { int sel; char findmess[20]; int p=0,i=0; if(n<=0) { system("cls"); printf("\n=>No menu record!\n"); getchar(); return n; } system("cls"); Disp(temp,n); printf("\n =>1 Delete by name =>2 Delete by telephonenumber\n"); printf(" Please choice[1,2]:"); scanf("%d",&sel); if(sel==1) { stringinput(findmess,10,"Input the existing name:"); p=Locate(temp,n,findmess,"name"); getchar(); if(p!=-1) { for(i=p+1;i<n;i++) /*删除此记录,后面记录向前移*/ { strcpy(temp[i-1].num,temp[i].num); strcpy(temp[i-1].name,temp[i].name); strcpy(temp[i-1].phonenum,temp[i].phonenum); strcpy(temp[i-1].address,temp[i].address); } printf("\n=>Delete success!\n"); n--; getchar(); saveflag=1; } else Nofind(); getchar(); } else if(sel==2) /*先按电话号码查询到该记录所在的数组元素的下标值*/ { stringinput(findmess,15,"Input the existing telephone number:"); p=Locate(temp,n,findmess,"phonenum"); getchar(); if(p!=-1) { for(i=p+1;i<n;i++) /*删除此记录,后面的记录向前移*/ { strcpy(temp[i-1].num,temp[i].num); strcpy(temp[i-1].name,temp[i].name); strcpy(temp[i-1].phonenum,temp[i].phonenum); strcpy(temp[i-1].address,temp[i].address); } printf("\n=>Delete success!\n"); n--; getchar(); saveflag=1; } else Nofind(); getchar(); } return n; } void Modify(RECORD temp[],int n) { char findmess[20]; int p=0; if(n<=0) { system("cls"); printf("\n=>No menu record!\n"); getchar(); return ; } system("cls"); printf("modify menu book recorder"); Disp(temp,n); stringinput(findmess,10,"Input the existing name:"); /*输入并检验该姓名*/ p=Locate(temp,n,findmess,"name"); /*查询到该数组元素,并返回下标值*/ if(p!=-1) /*若p!=-1,表明已经找到该数组元素*/ { printf("Number:%s,\n",temp[p].num); printf("Name:%s,",temp[p].name); stringinput(temp[p].name,15,"Input new name:"); printf("Name:%s,",temp[p].phonenum); stringinput(temp[p].name,15,"Input new telephone:"); printf("Name:%s,",temp[p].address); stringinput(temp[p].address,30,"Input new address:"); printf("\n=>modify success!\n");getchar(); Disp(temp,n); getchar();saveflag=1; } else { Nofind(); getchar(); } return ; } int Insert(RECORD temp[],int n) { char ch,num[10],s[10]; /*s[]保存插入点位置之前的记录编号,num[]保存输入的新记录的编号*/ RECORD newinfo; int flag=0,i=0,m=0; system("cls"); Disp(temp,n); while(1) { stringinput(s,10,"Please input insert location after the Number:"); flag=0;i=0; while(i<n) /*查询该编号是否存在,flag=1表示该编号存在*/ { if(strcmp(temp[i].num,s)==0) { m=i; flag=1; break; } i++; } if(flag==1) break; /*若编号存在,则进行插之前的新记录输入操作*/ else { getchar(); printf("\n=>The number is not existing,try again?(y\n):",s); scanf("%c",&ch); if(ch=='y'||ch=='Y') { continue; } else { return n; } } } /*以下新记录的输入操作与Add()相同*/ while(1) { stringinput(num,10,"Input new Number:"); flag=0;i=0; while(i<n) /*查询该编号是否存在,flag=1表示该编号存在*/ { if(strcmp(temp[i].num,num)==0) { flag=1; break; } i++; } if(flag==1) { getchar(); printf("\n=>Sorry,The number %s is existing,try again?(y\n):",num); scanf("%c",&ch); if(ch=='y'||ch=='Y') { continue; } else { return n; } } else break; } strcpy(newinfo.num,num); /*将字符串num拷贝到newinfo.num中*/ stringinput(newinfo.name,15,"Name:"); stringinput(newinfo.phonenum,15,"Telephone:"); stringinput(newinfo.address,15,"Address:"); saveflag=1; /*在main()中有对该全局变量的判断,若为1,则进行存盘操作*/ for(i=n-1;i>m;i--) /*从最后一个组织元素开始往前移一个元素位置*/ { strcpy(temp[i+1].num,temp[i].num); strcpy(temp[i+1].name,temp[i].name); strcpy(temp[i+1].phonenum,temp[i].phonenum); strcpy(temp[i+1].address,temp[i].address); } strcpy(temp[m+1].num,newinfo.num); strcpy(temp[m+1].name,newinfo.name); strcpy(temp[m+1].phonenum,newinfo.phonenum); strcpy(temp[m+1].address,newinfo.address); n++; Disp(temp,n); printf("\n\n");getchar(); return n; } void SelectSort(RECORD temp[],int n) { int i=0,j=0,flag=0,indexmin,select; char charflag[10]; RECORD newinfo; if(n<=0) { system("cls"); printf("\n=>Not record!\n"); getchar(); return ; } system("cls"); Disp(temp,n); /*显示排序前的所有记录*/ printf("\n =>1 SORT by num =>2 SORT by another way \n"); printf(" Please choice[1,2]:"); scanf("%d",&select); if(select==1) /*按记录编号排序*/ { for(i=0;i<n-1;i++) { flag=32767; indexmin=0; for(j=i;j<n;j++) { if(atoi(temp[j].num)<flag) { flag=atoi(temp[j].num); indexmin=j; } } strcpy(newinfo.num,temp[i].num); /*利用结构变量nesinfo实现数组元素的交换*/ strcpy(newinfo.name,temp[i].name); strcpy(newinfo.phonenum,temp[i].phonenum); strcpy(newinfo.address,temp[i].address); strcpy(temp[i].num,temp[indexmin].num); strcpy(temp[i].name,temp[indexmin].name); strcpy(temp[i].phonenum,temp[indexmin].phonenum); strcpy(temp[i].address,temp[indexmin].address); strcpy(temp[indexmin].num,newinfo.num); strcpy(temp[indexmin].name,newinfo.name); strcpy(temp[indexmin].phonenum,newinfo.phonenum); strcpy(temp[indexmin].address,newinfo.address); } Disp(temp,n); /*显示排序后的所有记录*/ saveflag=1; printf("\n=>Sort complete!\n");getchar(); return; } else if(select==2) { for(i=0;i<n-1;i++) { charflag[0]=255; indexmin=0; strcpy(newinfo.num,temp[i].num); /*利用结构变量nesinfo实现数组元素的交换*/ strcpy(newinfo.name,temp[i].name); strcpy(newinfo.phonenum,temp[i].phonenum); strcpy(newinfo.address,temp[i].address); strcpy(temp[i].num,temp[indexmin].num); strcpy(temp[i].name,temp[indexmin].name); strcpy(temp[i].phonenum,temp[indexmin].phonenum); strcpy(temp[i].address,temp[indexmin].address); strcpy(temp[indexmin].num,newinfo.num); strcpy(temp[indexmin].name,newinfo.name); strcpy(temp[indexmin].phonenum,newinfo.phonenum); strcpy(temp[indexmin].address,newinfo.address); } Disp(temp,n); /*显示排序后的所有记录*/ saveflag=1; printf("\n=>Sort complete!\n");getchar(); return; } else { Wrong(); getchar(); getchar(); return; } } void Save(RECORD temp[],int n) { int i=0; FILE *fp; fp=fopen("c:\\record.txt","w"); /*以只写方式打开文本文件*/ if(fp==NULL) /*打开文件失败*/ { printf("\n=>Open file error!\n"); getchar(); return; } for(i=0;i<n;i++) { if(fwrite(&temp[i],sizeof(RECORD),1,fp)==1) /*每次写一条记录或一个结构数组元素至文件*/ { continue; } else { break; } } if(i>0) { getchar(); printf("\n\n=>Save file complete,total saved's record number is:%d\n",i); getchar(); saveflag=0; } else { system("cls"); printf("The current link is empty,no menu record is saved!\n"); getchar(); } fclose(fp); /*关闭此文件*/ }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

X-MTing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值