cfl0122

通过本实例,希望对C语言编程初学者有所帮助。至少可以学习到以下方面:

1 菜单操作;

2 指针;

3 结构体 ;

4 链表;

5 文件操作:新建,修改,追加,读取;

6 函数调用,接口;

7 数组;

8 排序;

9 良好的窗口提示...

-----------------------------------------------------------

/* Note:Your choice is C IDE
环境:Turbo C for Windows 2007.5
存放路径:D:\InfoMsys
项目:龙丘科技有限公司员工通讯录系统
作者:邱钊鹏
E-mail:chiusir@yahoo.cn
软件版本:V1.0.1
最后更新:2008年8月13日
淘宝店:http://shop36265907.taobao.com/
*/
#i nclude <stdio.h>
#i nclude <stdlib.h>
#i nclude <string.h>
#i nclude <conio.h>
  
#define MaxRec 2001 //通讯录数目,自己可以适当增加或者减少
#define RecPerPg 5

struct student
{
  char ID[6];
  char name[20];
  char cell[13];
  char b1cell[13];  
  char QQ[12];
  char MSN[40];
  char email[40];
  char otel[20];
  char b1otel[20];
  char htel[14]; 
  char haddr[40];
  char backup[40]; 
};

/* 以下是函数原型说明,被调函数的定义在主调函数后面时,要加此部分 */
void PintMenu(void);
void ConInsRec(void);
void ViewRec(void);
void SearchRec(void); 
void ModifyRec(void);
int  ModifyOne(char tempnum[]);
void InsertRec(void);
void DeleteRec(void);
void SortRec(void);
int AppendFun(int maxid);

int ConfirmID(char *pf,char In_Arr[],int cnt)
{
  char tmarr[40]="",tmch;
  do{
    printf("    %s",pf);
    gets(tmarr);
    if((atoi(tmarr)>0)&&(atoi(tmarr)<2001) ) break;
    else
    {     
      printf("\n    ID应为1~2000,要退出吗(Y-退出/N-返回)?");      
      putch(tmch=getch());
      if((tmch==\'y\')||(tmch==\'Y\')||(tmch==27)) return 1;  
    }
    if(strlen(tmarr)>cnt-1)
    {
      printf("\n    长度(1~%d)不符合要求!\n",cnt-1); 
    }
    else if(strcmp(tmarr,"")==0)
    {
      printf("\n    ID应为1~2000,要退出吗(Y-退出/N-返回)?");        
     putch(tmch=getch());
     if((tmch==\'y\')||(tmch==\'Y\')||(tmch==27)) return 1;
    }
  }while(strlen(tmarr)>cnt-1);
  sprintf(tmarr,"%04d",atoi(tmarr));
  strcpy(In_Arr,tmarr);
  return 0;
}
int ConfirmName(char *pf,char In_Arr[],int cnt)
{
  char tmarr[40]="",tmch;
  do{
    printf("    %s",pf);
    gets(tmarr);
    if(strlen(tmarr)>cnt-1)
    {
      printf("\n    长度(1~%d)不符合要求!\n",cnt-1); 
    }
    else if(strcmp(tmarr,"")==0)
    {
      printf("\n    姓名为空,要退出吗(Y-退出/N-返回)?");        
     putch(tmch=getch());
     if((tmch==\'y\')||(tmch==\'Y\')||(tmch==27)) return 1;
    }
  }while(strlen(tmarr)>cnt-1);
  strcpy(In_Arr,tmarr);
  return 0;
}
void ConfirmArr(char *pf,char In_Arr[],int cnt)
{
  char tmarr[250]="";
  do{
    printf("    %s",pf);
    gets(tmarr);
    if(strcmp(tmarr,"")==0||strlen(tmarr)>cnt-1)
    {
      printf("\n    长度(1~%d)不符合要求!\n",cnt-1);
    }    
  }while((strlen(tmarr)>cnt-1)||(strlen(tmarr)==0));
  strcpy(In_Arr,tmarr);
  return ;
}
int ConfirmSel(void)
{
  char tmarr[3]="",sel=0;
  do{   
    if((tmarr[sel]=getch())==13) break;
    putch(tmarr[sel++]);     
  }while(strlen(tmarr)<2);
  return (atoi(tmarr));  
}
int ConfirmPW(char In_Arr[])
{
  char tmarr[15]="",errflag=0,sel=0;
  printf("\n\n\n    请输入登陆密码(ESC退出):");  
  do{     
    if((tmarr[sel]=getch())==27) exit(0);
   putch(\'*\');
   if((sel<strlen(In_Arr))&&(tmarr[sel]!=In_Arr[sel])) 
      errflag=1;
   else if((sel==(strlen(In_Arr)-1))&&(errflag==0))
     return 0;
   /*printf("\nstrlen(In_Arr)=%d,tmarr[sel]=%c,strlen(tmarr)=%d",strlen(In_Arr),tmarr[sel],strlen(tmarr)); */
   ++sel;
  }while(strlen(tmarr)<12);
  return 1; 
}
/*延时函数*/
void delay_s(unsigned int s)
{
  int ii,jj,sel;
  for(ii=0;ii<s;ii++)
   for(sel=0;sel<10000;sel++)/*参数根据计算速度适当加减*/
     for(jj=0;jj<20000;jj++); /*此处使用酷睿2双核2.4G,800M前端总线频率*/
}
/*==================main()=====================*/
void main(void)

  char sel=0,yes_no=0,ErrorCnt=0;
  char password[12]="2008";//此处设置系统密码,长度可以自己修改 
  FILE *fp; 
 
  //clrscr(); 
  printf("\n\n\n\n\n\n");
  printf("\n                     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ");
  printf("\n                     !                                    ! ");
  printf("\n                     !    欢迎使用个人通讯录通讯录系统    ! ");
  printf("\n                     !                                    ! ");
  printf("\n                     !                      作者:邱钊鹏  ! ");
  printf("\n                     !                      版本:V1.0.1  ! ");
  printf("\n                     !                     2008年08月13日 ! ");
  printf("\n                     !                   chiusir@yahoo.cn ! ");
  printf("\n                     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ");   
  while(ErrorCnt<3)
  {
    if(ConfirmPW(password)==0) break;
    if(++ErrorCnt>0)
    {     
      printf("\n            您第%d次输入的密码错误,请重试!",ErrorCnt);     
    }
    if(ErrorCnt>=3)
    {
      printf("\n            您连续三次输入的密码错误,10分钟后重试!"); 
      delay_s(3);
     exit(0);
    }
    delay_s(1);
  }; 
  printf("\n    恭喜,输入密码正确!");  
  delay_s(1);
 
  fp=fopen("longqiu.dat","r+");
  if(fp==NULL)
  {
    printf("\n    打开文件失败!\n    正在创建新文件...\n");
   fp=fopen("longqiu.dat","w+");
   printf("\n    写入第一个样板记录...\n");
   delay_s(1);
   fprintf(fp,"0001  邱钊鹏              13820080808  13620080808  88888888    chiusir@yahoo.cn                        chiusir@yahoo.cn                        010-67396661-8415   010-67396661-8415   0377-20080808 北京工业大学电动车技术研究中心          欢迎报考北京工业大学研究生              ");
  }
  if(fp!=NULL) fclose(fp);
 
  while(1)
  {
    PintMenu();    /* 显示主菜单 */     
    printf("\n        请选择0~7(Q/ESC-退出系统):");     
    putch(sel=getch());
    switch(sel)
    {
      case \'1\':  SearchRec();  break;    /* 显示,正常 */
      case \'2\':  ViewRec();    break;    /* 查询,正常 */      
      case \'3\':  InsertRec();  break;    /* 添加,正常 */
      case \'4\':  ConInsRec();  break;    /* 创建,正常 */
      case \'5\':  ModifyRec();  break;    /* 修改,正常 */
      case \'6\':  SortRec();    break;    /* 排序,正常 */      
      case \'7\':  DeleteRec();  break;    /* 删除,正常 */
      case 27:     
      case \'0\':  
      case \'Q\': 
      case \'q\': 
      {
       printf("\n        要继续操作吗(Q/ESC-退出系统/其他键-返回)?-->");    
       putch(yes_no=getch());    
       if((yes_no==\'q\')||(yes_no==\'Q\')||(yes_no==27)) exit(0); 
      }
      break;   
      default:  
        printf("\n    %c为非法选项!(Q/ESC-退出系统/其他键-返回)\n",sel);
        delay_s(1);
      break;
    }   
  }
}

void PintMenu(void)         /* 显示菜单界面  */
{
  //clrscr();
  printf("\n\n\n\n"); 
  printf("\n                     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ");
  printf("\n                     !  龙丘科技有限公司员工通讯录系统  !  ");
  printf("\n                     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ");
  printf("\n                        |----------------------------|     ");
  printf("\n                        |   请输入选项编号(0-7):     |     ");
  printf("\n                        |----------------------------|     ");
  printf("\n                        |   1--查询记录              |     ");
  printf("\n                        |   2--查看全部记录          |     "); 
  printf("\n                        |   3--添加记录              |     ");
  printf("\n                        |   4--连续添加记录          |     ");
  printf("\n                        |   5--修改记录              |     "); 
  printf("\n                        |   6--记录排序              |     ");
  printf("\n                        |   7--删除记录              |     ");
  printf("\n                        |   0--(Q或ESC)退出系统      |     ");
  printf("\n                        |----------------------------|\n");
}

/* 定义创建信息管理系统的函数 */  
void ConInsRec()
{
  int n=0,maxid=0;
  struct student temp;
  FILE *fp;
 
  fp=fopen("longqiu.dat","r+");
  if(fp==NULL)
  {
    printf("\n    打开文件失败!\n");
    return;
  }
  while(feof(fp)==0)
  {
    fscanf(fp,"%6s%20s%13s%13s%12s%40s%40s%20s%20s%14s%40s%40s\n",&temp.ID,&temp.name,&temp.cell,&temp.b1cell,&temp.QQ,&temp.MSN,&temp.email,&temp.otel,&temp.b1otel,&temp.htel,&temp.haddr,&temp.backup);   
    n++;
    maxid=((atoi(temp.ID)>maxid)?atoi(temp.ID):maxid);
  }
  fclose(fp);
  printf("\n    总共有%d条记录,最大ID为%04d.",n,maxid);
 
  while(1)
  {
    if(AppendFun(maxid)) break;
    ++maxid;       
  }
}          
int AppendFun(int maxid)
{
  char c;
  int n=0;
  struct student temp,record[MaxRec],*p;
  FILE *fp;    
   
  fp=fopen("longqiu.dat","r+");
  if(fp==NULL)
  {
    printf("\n    打开文件失败!\n");
    return 1;
  }
  p=record;
  while(feof(fp)==0)
  {
    fscanf(fp,"%6s%20s%13s%13s%12s%40s%40s%20s%20s%14s%40s%40s\n",p->ID,p->name,p->cell,p->b1cell,p->QQ,p->MSN,p->email,p->otel,p->b1otel,p->htel,p->haddr,p->backup); 
    p++;
    n++;
  }   
  fclose(fp);
  printf("\n    请输入第%d个记录,ID为%04d:\n",1+n,1+maxid);
  sprintf(temp.ID,"%04d",1+maxid);
  if(ConfirmName("请输入新记录的姓名(直接回车结束输入):",temp.name,sizeof(temp.name))) return 1;
  ConfirmArr("请输入新记录手机号:",temp.cell,sizeof(temp.cell));
  ConfirmArr("请输入备注手机号1:",temp.b1cell,sizeof(temp.b1cell)); 
  ConfirmArr("请输入新记录的QQ:",temp.QQ,sizeof(temp.QQ));
  ConfirmArr("请输入新记录的MSN:",temp.MSN,sizeof(temp.MSN));
  ConfirmArr("请输入新记录的E-Mail:",temp.email,sizeof(temp.email));  
  ConfirmArr("请输入新记录的办公电话:",temp.otel,sizeof(temp.otel));
  ConfirmArr("请输入备注办公电话1:",temp.b1otel,sizeof(temp.b1otel));
  ConfirmArr("请输入新记录的家庭电话:",temp.htel,sizeof(temp.htel)); 
  ConfirmArr("请输入新记录的家庭地址:",temp.haddr,sizeof(temp.haddr));
  ConfirmArr("请输入备注:",temp.backup,sizeof(temp.backup));
  if(p==record+n)  *p=temp;
  fp=fopen("longqiu.dat","r+");
  if(fp==NULL)
  {
    printf("\n    打开文件失败!\n");
    return 1;
  }
  for(p=record;p<record+n+1;p++)
    fprintf(fp,"%-6s%-20s%-13s%-13s%-12s%-40s%-40s%-20s%-20s%-14s%-40s%-40s\n",p->ID,p->name,p->cell,p->b1cell,p->QQ,p->MSN,p->email,p->otel,p->b1otel,p->htel,p->haddr,p->backup); 
  fclose(fp);
  return 0;
}
/* 定义添加信息管理系统的函数 */ 
void InsertRec(void)
{
  char c,yes_no;
  int n=0,maxid=0;
  struct student temp,record[MaxRec],*p;
  FILE *fp;
  while(1)
  {  
    n=0;
    maxid=0;
    fp=fopen("longqiu.dat","r+");
    if(fp==NULL)
    {
      printf("\n    打开文件失败!\n");
      return;
    }            
   
    p=record;
    while(feof(fp)==0)
    {
      fscanf(fp,"%6s%20s%13s%13s%12s%40s%40s%20s%20s%14s%40s%40s\n",p->ID,p->name,p->cell,p->b1cell,p->QQ,p->MSN,p->email,p->otel,p->b1otel,p->htel,p->haddr,p->backup); 
      p++;
      n++;     
    }
    fclose(fp);
    fp=fopen("longqiu.dat","r+");
    if(fp==NULL)
    {
      printf("\n    打开文件失败!\n");
      return;
    }
    while(feof(fp)==0)
    {
      fscanf(fp,"%6s%20s%13s%13s%12s%40s%40s%20s%20s%14s%40s%40s\n",&temp.ID,&temp.name,&temp.cell,&temp.b1cell,&temp.QQ,&temp.MSN,&temp.email,&temp.otel,&temp.b1otel,&temp.htel,&temp.haddr,&temp.backup);
      maxid=((atoi(temp.ID)>maxid)?atoi(temp.ID):maxid);
    }
    printf("\n    总共有%d条记录,最大ID为%04d.",n,maxid);
    fclose(fp); 
IDCHECK:
 if(ConfirmID("\n请输入新记录的ID(1~2000,直接回车结束输入):",temp.ID,sizeof(temp.ID))) return;
    for(p=record;p<record+n;p++)
      if(strcmp(temp.ID,p->ID)==0)
      {
        printf("\n\tID重复,要重新输入吗(Y/N)?");
        putch(yes_no=getch());
      if((yes_no==\'n\')||(yes_no==\'N\')||(yes_no==27)) return;
        goto IDCHECK;     
      }   
    /*if(ConfirmID("请输入新记录的ID(1~2000,直接回车结束输入):",temp.ID,sizeof(temp.ID))) return; */      
    if(ConfirmName("请输入新记录的姓名(直接回车结束输入):",temp.name,sizeof(temp.name))) return;       
    ConfirmArr("请输入新记录手机号:",temp.cell,sizeof(temp.cell));
    ConfirmArr("请输入备注手机号1:",temp.b1cell,sizeof(temp.b1cell)); 
    ConfirmArr("请输入新记录的QQ:",temp.QQ,sizeof(temp.QQ));
    ConfirmArr("请输入新记录的MSN:",temp.MSN,sizeof(temp.MSN));
    ConfirmArr("请输入新记录的E-Mail:",temp.email,sizeof(temp.email));  
    ConfirmArr("请输入新记录的办公电话:",temp.otel,sizeof(temp.otel));
    ConfirmArr("请输入备注办公电话1:",temp.b1otel,sizeof(temp.b1otel));
    ConfirmArr("请输入新记录的家庭电话:",temp.htel,sizeof(temp.htel)); 
    ConfirmArr("请输入新记录的家庭地址:",temp.haddr,sizeof(temp.haddr));
    ConfirmArr("请输入备注:",temp.backup,sizeof(temp.backup));
    if(p==record+n)  *p=temp;   
   
    fp=fopen("longqiu.dat","r+");
    if(fp==NULL)
    {
      printf("\n    打开文件失败!\n");
      return;
    }
    for(p=record;p<record+n+1;p++)
      fprintf(fp,"%-6s%-20s%-13s%-13s%-12s%-40s%-40s%-20s%-20s%-14s%-40s%-40s\n",p->ID,p->name,p->cell,p->b1cell,p->QQ,p->MSN,p->email,p->otel,p->b1otel,p->htel,p->haddr,p->backup); 
    fclose(fp);
    printf("\n    增加记录成功!要继续增加吗(Y/N)?");      
    putch(yes_no=getch());
    if((yes_no==\'n\')||(yes_no==\'N\')||(yes_no==27)) break;   
  }
}
/* 定义显示信息管理系统的函数 */
void ViewRec(void)
{
  int n=0,m=0,totrec=0,yes_no;
  struct student temp;
  FILE *fp; 
 
  fp=fopen("longqiu.dat","r+");
  if(fp==NULL)
  {
    printf("\n    打开文件失败!\n");
    return;
  } 
  while(feof(fp)==0)
  {    
    fscanf(fp,"%6s%20s%13s%13s%12s%40s%40s%20s%20s%14s%40s%40s\n",&temp.ID,&temp.name,&temp.cell,&temp.b1cell,&temp.QQ,&temp.MSN,&temp.email,&temp.otel,&temp.b1otel,&temp.htel,&temp.haddr,&temp.backup);      
    totrec++;
  }
  fclose(fp);
  fp=fopen("longqiu.dat","r+");
  n=0;     
  for(n=1;n<totrec/RecPerPg+1;n++)
  {
   //clrscr();    
    printf("\n ID  姓名 手机 备注手机 QQ MSN E-Mail 办公电话 备注电话 住宅电话 家庭地址 备注"); 
    for(m=0;m<RecPerPg;m++)
   {
     fscanf(fp,"%6s%20s%13s%13s%12s%40s%40s%20s%20s%14s%40s%40s\n",&temp.ID,&temp.name,&temp.cell,&temp.b1cell,&temp.QQ,&temp.MSN,&temp.email,&temp.otel,&temp.b1otel,&temp.htel,&temp.haddr,&temp.backup);
     printf("\n%-6s%-20s%-13s%-13s%-12s%-40s%-40s%-20s%-20s%-14s%-40s%-40s",temp.ID,temp.name,temp.cell,temp.b1cell,temp.QQ,temp.MSN,temp.email,temp.otel,temp.b1otel,temp.htel,temp.haddr,temp.backup);    
    }
    printf("\n    <第%d页,按任意键显示下一页(ESC退出)!>",n);    
   yes_no=getch();
   if(yes_no==27) return; 
   }
   //clrscr();
   printf("\n ID  姓名 手机 备注手机 QQ MSN E-Mail 办公电话 备注电话 住宅电话 家庭地址 备注");
   for(m=0;m<totrec%RecPerPg;m++)
   {
    fscanf(fp,"%6s%20s%13s%13s%12s%40s%40s%20s%20s%14s%40s%40s\n",&temp.ID,&temp.name,&temp.cell,&temp.b1cell,&temp.QQ,&temp.MSN,&temp.email,&temp.otel,&temp.b1otel,&temp.htel,&temp.haddr,&temp.backup);
    printf("\n%-6s%-20s%-13s%-13s%-12s%-40s%-40s%-20s%-20s%-14s%-40s%-40s",temp.ID,temp.name,temp.cell,temp.b1cell,temp.QQ,temp.MSN,temp.email,temp.otel,temp.b1otel,temp.htel,temp.haddr,temp.backup);    
   }   
  fclose(fp);
  if(n==0)
    printf("\n    系统中无记录!\n");
  else
    printf("\n    系统中共有%d个记录!\n    按任意键返回主菜单!",totrec); 
  getch();

待续

分类:

技术点:

相关文章:

  • 2022-02-10
  • 2023-03-19
  • 2021-11-04
  • 2022-12-23
  • 2022-12-23
  • 2021-12-18
猜你喜欢
  • 2022-12-23
  • 2021-05-29
  • 2023-02-26
  • 2022-12-23
  • 2022-12-23
  • 2021-12-15
相关资源
相似解决方案