亲宝软件园·资讯

展开

C语言籍贯信息记录簿

普通学长 人气:0

一、任务概述(文章仅供参考)

进一步掌握和利用C语言进行课程设计的能力;
进一步理解和运用结构化程序设计的思想和方法;
初步掌握开发一个小型实用系统的基本方法;

二、设计功能

1.创建信息链表并以磁盘文件保存;
2.读取磁盘文件并显示输出所有学生的籍贯信息;
3.按学号或姓名查询其籍贯;
4.按籍贯查询并输出该籍贯的所有学生;
5.能添加、删除和修改学生的籍贯信息

三、功能展示

四、思维导图

五、程序源码

#include "dos.h"
#include "stdio.h"
#include "stdlib.h"
#include "conio.h"
#include "math.h"
#include "string.h" 
/**********************建立链表******************************/
struct hj   
{ long number;
  char name[10],address[50];
  struct hj *next;
};
/********************文件操作函数******************************/
FILE *fp;
void openfile(char xx[20])
{
 
 fp=fopen(xx,"ab+");
 if(fp==NULL)
    fp=fopen(xx,"wb");
}
/**************录入信息函数***********************************/
void hjnew(void) 
{
 system("cls");
 int n=0;
 long xnumber;
 char xname[10];
 char xaddress[50];
 struct hj *head;
 struct hj *x1,*x2;
 head=NULL;
 x2=NULL;
 printf("\n                ★★★★★欢迎使用户籍管理系统★★★★★\n");
 printf("\n                          ★★★录入信息★★★\n");
 printf("\n                        〓提示输入0返回上级菜单〓\n\n\n");
 printf("\n                         请输入学号【15字内】:");
 scanf("%ld",&xnumber);
 if(xnumber==0)
  goto haha;
 printf("\n                         请输入姓名【10字内】:");
 scanf("%s",xname);
 printf("\n                         请输入籍贯【25字内】:");
 scanf("%s",xaddress);
    while(xnumber!=0)
 {
  n++;
  x1=(struct hj *)malloc(sizeof(struct hj));
  x1->number=xnumber; 
  strcpy(x1->name,xname);
  strcpy(x1->address,xaddress);
  if(n==1)
   head=x1;
  else
   x2->next=x1;
     x2=x1;
 printf("\n                         请输入学号【15字内】:");
 scanf("%ld",&xnumber);
 if(xnumber==0)
  break;
 printf("\n                         请输入姓名【10字内】:");
 scanf("%s",xname);
 printf("\n                         请输入籍贯【25字内】:");
 scanf("%s",xaddress);
 }
 x2->next=NULL;
 x1=head;
 while(x1!=NULL)
 {
  openfile("hj.txt");
  char d[5]="山西";
  fwrite(x1,sizeof(struct hj),1,fp);
  fclose(fp);
  
  if(strstr(x1->address,d)!=NULL)
  { 
   openfile("schj.txt");
   fwrite(x1,sizeof(struct hj),1,fp);
   fclose(fp);
  }
  else
  {
   openfile("qthj.txt");
   fwrite(x1,sizeof(struct hj),1,fp);
   fclose(fp);
  }
  x1=x1->next;
 }
 
haha:;
}
/*****************************查询函数*************************/
void hjxmselect(void) //按学号方式查询函数
{
ssmmx:
 int n=0;
 long hh;
 system("cls");
 printf("\n                ★★★★★欢迎使用户籍管理系统★★★★★\n");
 printf("\n                        ★★★查询编辑信息★★★\n");
 printf("\n                        〓提示输入0返回上级菜单〓\n\n\n");
 printf("                         请您输入学号:");
 scanf("%ld",&hh);
 if(hh!=0)
 { 
  struct hj *p;
  struct hj *q=NULL,*head=NULL;
  fp=fopen("hj.txt","rb");
    if(fp==NULL)
  {
   printf("\n没有记录,请输入记录然后再查询!");
   getch();
   goto jjx;
  }
  while(!feof(fp))
  {
   n++;
   p=(struct hj *)malloc(sizeof(struct hj));
   fread(p,sizeof(struct hj),1,fp);
   if(n==1)
    head=p;
   else
    q->next=p;
   q=p;

  }
  q->next=NULL;
  p=head;
  while(p!=NULL)
  {
   if(p->number==hh)
   {   
    int a;
    printf("\n  结 果 →     学号=%ld   姓名=%s",p->number,p->name);
    printf("\n               地址=%s",p->address);
    printf("\n\n  操 作 →    ⑴更改数据  ⑵删除数据  ⑶查询其他数据  ⑷返回上页  ⑸退出程序\n\n  请您选择操作:");
ssmx:
    scanf("%d",&a);
    switch(a)
    { 
     void hjedit(struct hj *headd,struct hj *pp);
     void hjdelete(struct hj *headdd,struct hj *ss);
     case 1: hjedit(head,p);
       goto ssmmx;break;
     case 2: hjdelete(head,p);
       goto ssmmx;break;
     case 3: goto ssmmx;
     case 4: goto jjx;
     case 5:exit(0);
     default:printf("\n                        错误的选择,请重新选择:");
     goto ssmx;
    }
     }
   else
    p=p->next;
  }
  int iiii=0;
  printf("\n                         没有此记录 1.重新查询 2.返回上一页 3.退出程序!");
  printf("\n                         请选择:");
qqqq:
  scanf("%d",&iiii);
  switch(iiii)
  {
   case 1:  goto ssmmx;
   case 2:  goto jjx;
   case 3:  exit(0);
   default: printf("\n                        错误的选择,请重新选择:");
     goto qqqq;
  }
     goto jjx;
 }
jjx:;
}
void hjxhselect(void)//按姓名方式查询函数
{
ssmm:
 int n=0;
 char hh[10];
 system("cls");
 printf("\n                ★★★★★欢迎使用户籍管理系统★★★★★\n");
 printf("\n                        ★★★查询编辑信息★★★\n");
 printf("\n                        〓提示输入0返回上级菜单〓\n\n\n");
 printf("                         请您输入姓名:");
 scanf("%s",hh);
 if(strcmp(hh,"0")!=0)
 { 
  struct hj *p;
  struct hj *q=NULL,*head=NULL;
  fp=fopen("hj.txt","rb");
  if(fp==NULL)
  {
   printf("\n没有记录,请输入记录然后再查询!");
   getch();
   goto jjj;
  }
  while(!feof(fp))
  {
   n++;
   p=(struct hj *)malloc(sizeof(struct hj));
   fread(p,sizeof(struct hj),1,fp);
   if(n==1)
    head=p;
   else
    q->next=p;
   q=p;
  }
  q->next=NULL;
  p=head;
        while(p!=NULL)
  {
   if(strcmp(p->name,hh)==0)
   {   
    int a;
    printf("\n  结 果 →     学号=%ld   姓名=%s  ",p->number,p->name);
    printf("\n               地址=%s",p->address);
    printf("\n\n  操 作 →    ⑴更改数据  ⑵删除数据  ⑶查询其他数据  ⑷返回上页  ⑸退出程序\n\n  请您选择操作:");
ssm:
    scanf("%d",&a);
    switch(a)
    { 
     void hjedit(struct hj *headd,struct hj *pp);
     void hjdelete(struct hj *headdd,struct hj *ss);
     case 1: hjedit(head,p);
       goto ssmm;break;
     case 2: hjdelete(head,p);
       goto ssmm;break;
     case 3: goto ssmm;
     case 4: goto jjj;
     case 5:exit(0);
     default:printf("\n                        错误的选择,请重新选择:");
     goto ssm;
    }
     }
   else
    p=p->next;
  }
  int iii=0;
  printf("\n                         没有此记录 1.重新查询 2.返回上一页 3.退出程序!");
  printf("\n                         请选择:");
qqq:
  scanf("%d",&iii);
  switch(iii)
  {
   case 1:  goto ssmm;
   case 2:  goto jjj;
   case 3:  exit(0);
   default: printf("\n                        错误的选择,请重新选择:");
     goto qqq;
  }
     goto jjj;
 }
jjj:  ;
}
void hjjgselect(void)//按籍贯方式查询
{
yyy: 
 int i;
    system("cls");
 printf("\n                ★★★★★欢迎使用户籍管理系统★★★★★\n");
 printf("\n                      ★★★籍贯方式查询信息★★★\n\n\n");
 printf("\n                         一  显示所有信息\n");
 printf("\n                         二  显示山西籍所有信息\n");
 printf("\n                         三  显示其它籍所有信息\n");
 printf("\n                         四  自定义查询信息\n");
 printf("\n                         五  ←返回上级菜单\n");
 printf("\n                         六  ↓退出程序\n");
 printf("\n\n                          请选择:");
 scanf("%d",&i);
 switch(i)
 { void zdyselect(void);
  void allselect(char a[8]);
  case 1:allselect("hj.txt");
       goto yyy;break;
  case 2: allselect("schj.txt");
    goto yyy;break;
  case 3: allselect("qthj.txt");
    goto yyy;break;
  case 4: zdyselect();
  case 5: break;
  case 6: exit(0);
 }
}
void zdyselect(void)
{ 
ssmmz:
 int n=0,j=0;
 char hh[10];
 system("cls");
 printf("\n                ★★★★★欢迎使用户籍管理系统★★★★★\n");
 printf("\n                        ★★★自定义查询信息★★★\n\n\n");
 printf("                         请您输入地址关键字:");
    scanf("%s",hh);
 if(strcmp(hh,"0")!=0)
 { 
  struct hj *p;
  struct hj *q=NULL,*head=NULL;
  fp=fopen("hj.txt","rb");
  
  if(fp==NULL)
  {
   printf("\n       没有记录,请输入记录然后再查询!");
   getch();
   goto jjz;
  }
  while(!feof(fp))
  {
   n++;
   p=(struct hj *)malloc(sizeof(struct hj));
   fread(p,sizeof(struct hj),1,fp);
   if(n==1)
    head=p;
   else
    q->next=p;
   q=p;
  }
  q->next=NULL;
  p=head;

  while(p!=NULL)
  {
   
   if(strstr(p->address,hh)!=NULL)
   {   
    
    int a;
    j++;
    printf("\n  结 果 →     学号=%ld   姓名=%s  ",p->number,p->name);
    printf("\n               地址=%s",p->address);
    printf("\n\n  操 作 →    ⑴更改数据  ⑵删除数据  ⑶查询下一条数据  ⑷返回上页  ⑸退出程序\n\n  请您选择操作:");
ssmz:
    scanf("%d",&a);
    switch(a)
    { 
     void hjedit(struct hj *headd,struct hj *pp);
     void hjdelete(struct hj *headdd,struct hj *ss);
     case 1: hjedit(head,p);
       goto ssmmz;break;
     case 2: hjdelete(head,p);
       goto ssmmz;break;
     case 3: p=p->next;continue;
     case 4: goto jjz;
     case 5:exit(0);
     default:printf("\n                        错误的选择,请重新选择:");
     goto ssmz;
    }
    p=p->next;
   }
   else
    p=p->next;
  }
  if(j==0)
  {
   printf("\n\n\n没有匹配的记录 按任意键继续!");
   getch();
   fclose(fp);
   goto ssmmz;
  }
  else
  { int xx;
   printf("\n\n查询完毕!    ⑴  继续查询  ⑵  返回上一级菜单  ⑶   退出程序");
   printf("\n请选择:");
   scanf("%d",&xx);
   if(xx==2)
    goto jjz;
   else if(xx==3)
    exit(0);
    
  }
  goto ssmmz;
jjz:  ;
 }
 
}
void allselect(char a[8])//全部查询
{
 int n=0;

 int k=0;
 system("cls");
 printf("\n                ★★★★★欢迎使用户籍管理系统★★★★★\n");
 printf("\n                        ★★★籍贯方式信息★★★\n\n\n");
 
    struct hj *p;

 struct hj *q=NULL,*head=NULL;
 fp=fopen(a,"rb");
 if(fp==NULL)
 {
  printf("\n对不起,没有记录无法查询!");
  goto xxxx;
 }
 rewind(fp);
 while(!feof(fp))
 {
   n++;
   p=(struct hj *)malloc(sizeof(struct hj));
   fread(p,sizeof(struct hj),1,fp);
   if(n==1)
    head=p;
   else
    q->next=p;
   q=p;

 }

 q->next=NULL;
    struct hj *h1,*p2,*q3,*r4,*s5;
 h1=p2=(hj *)malloc(sizeof(struct hj));
 p2->next=head;
 
 while(p2->next!=NULL) 
 { 
  q3=p2->next; 
  r4=p2; 
  while(q3->next!=NULL) 
  { 
   if(q3->next->number<p2->next->number) 
   r4=q3; 
   q3=q3->next; 
  } 
  if(r4!=p2) 
  { 
   s5=r4->next; 
   r4->next=s5->next; 
   s5->next=p2->next; 
   p2->next=s5; 
  } 
  p2=p2->next; 
 } 
 head=h1->next->next; 
 free(h1); 
    p=head;
 while(p!=NULL&&n>0)
 {
  n--;
  printf("\n学号=%ld  姓名=%s",p->number,p->name);
  printf("\n地址=%s",p->address);
        p=p->next;
 }
xxxx:
 printf("\n→显示完毕←\n⑴ ↑返回上级菜单   ⑵ ↓退出程序 \n请 选 择 :");
xxx:
 scanf("%d",&n);
 switch(n)
 {
  case 1:break;
  case 2:exit(0);
  default:printf("\n错误的选择,请重新选择:");
    goto xxx;
 }
}
void hjselect(void)//查询编辑信息函数
{ 
cxbegin:
 int a;
 system("cls");
 printf("\n                ★★★★★欢迎使用户籍管理系统★★★★★\n");
 printf("\n                        ★★★查询编辑信息★★★\n\n\n");
 printf("\n                         一    按学号方式查询\n");
 printf("\n                         二    按姓名方式查询\n");
 printf("\n                         三    按籍贯方式查询\n");
 printf("\n                         四    →显示全部信息\n");
 printf("\n                         五    ←返回上级菜单\n");
 printf("\n                         请 选 择 查 询 方 式:");
cxmm:
 scanf("%d",&a);
 switch(a)
 { 
  case 1: hjxmselect();goto cxbegin;break;
  case 2: hjxhselect();goto cxbegin;break;
  case 3: hjjgselect();goto cxbegin;break;
  case 4: allselect("hj.txt");goto cxbegin;break;
  case 5: break;
  default:printf("\n错误的选择,请重新选择:");
       goto cxmm;
 }
}
void hjde(void)//删除界面函数
{
cxxbegin:
 int a;
 system("cls");
 printf("\n                ★★★★★欢迎使用户籍管理系统★★★★★\n");
 printf("\n                          ★★★删除信息★★★\n\n\n");
 printf("\n                         一    按学号方式删除\n");
 printf("\n                         二    按姓名方式删除\n");
 printf("\n                         三    按籍贯方式删除\n");
 printf("\n                         四    →删除全部信息\n");
 printf("\n                         五    ←返回上级菜单\n");
 printf("\n                         请 选 择 删 除 方 式:");
cxxmm:
 scanf("%d",&a);
 int i=0;
 switch(a)
 { 
  case 1: hjxmselect();goto cxxbegin;break;
  case 2: hjxhselect();goto cxxbegin;break;
  case 3: zdyselect();goto cxxbegin;break;
  case 4:  
     fp=fopen("hj.txt","wb");
     if(fp!=NULL)
      i++;
     fp=fopen("schj.txt","wb");
     if(fp!=NULL)
      i++;
     fp=fopen("qthj.txt","wb");
     if(fp!=NULL)
      i++;
     if(i==3)
     {
      printf("\n                         全部数据已经删除!!!!!!敲任意键继续");
      getch();
     }
     goto cxxbegin;break;
  case 5: break;
  default:printf("\n错误的选择,请重新选择:");
       goto cxxmm;
 }
}
//==============删除函数接口===============
void hjdelete(struct hj *headdd,struct hj *ss)
{
 struct hj *q;
 char d[5]="山西";
 if(headdd==ss)
 {
  headdd=headdd->next;
  goto gogo;
 }
 q=headdd;
 while(q!=NULL)
 {
  if(q->next->number==ss->number)
  { 
             break;
  }
  q=q->next;
 }
    q->next=ss->next;
gogo:
 q=headdd;
    fp=fopen("hj.txt","wb");
 while(q!=NULL)
 {
  
  fwrite(q,sizeof(struct hj),1,fp);
  q=q->next;
 }
 fclose(fp);
 q=headdd;
 fp=fopen("schj.txt","wb");
 while(q!=NULL)
    {
  if(strstr(q->address,d)!=NULL)
  { 
   fwrite(q,sizeof(struct hj),1,fp);
  }
  q=q->next;
 }
 fclose(fp);
 q=headdd;
 fp=fopen("qthj.txt","wb");
 while(q!=NULL)
    {
  if(strstr(q->address,d)==NULL)
  { 
   fwrite(q,sizeof(struct hj),1,fp);
  }
  q=q->next;
 }
 fclose(fp);

}
//===============编辑函数接口==============
void hjedit(struct hj *headd,struct hj *pp)
{
 int n=0;
 struct hj *p,*p1,*p2;
 char d[5]="江苏";
 printf("\n  输 入 →    学号=");
 scanf("%ld",&pp->number);
 printf("\n              姓名=");
 scanf("%s",pp->name);
 printf("\n              地址=");
 scanf("%s",pp->address);
 p=headd;
 fp=fopen("hj.txt","wb");
 while(p!=NULL)
 {
  
  fwrite(p,sizeof(struct hj),1,fp);
  p=p->next;
 }
 fclose(fp);
 p1=headd;
 fp=fopen("schj.txt","wb");
 while(p1!=NULL)
    {
  if(strstr(p1->address,d)!=NULL)
  { 

   fwrite(p1,sizeof(struct hj),1,fp);
      
  }
  p1=p1->next;
 }
 fclose(fp);
 p2=headd;
 fp=fopen("qthj.txt","wb");
 while(p2!=NULL)
    {
  if(strstr(p2->address,d)==NULL)
  { 
   fwrite(p2,sizeof(struct hj),1,fp);
  }
  p2=p2->next;
 }
 fclose(fp);
}
/**************************主函数***********************/
int main(int argc, char* argv[])
{   
begin: 
    int t;
 system("cls");
 printf("\n                ★★★★★欢迎使用户籍管理系统★★★★★\n\n\n\n\n");
 printf("                        一 录入学生籍贯信息\n\n");
 printf("                        二 查编学生籍贯信息\n\n");
 printf("                        三 删除学生籍贯信息\n\n");
 printf("                        四 退出程序\n\n");
 printf("                        请您选择:");
mm: 
 scanf("%d",&t);
 switch(t)
 { 
  case 1: hjnew();break;
  case 2: hjselect();break;
  case 3: hjde();break;
  case 4:exit(0);
  default:printf("\n                        错误的选择,请重新选择:");
       goto mm;
 }
 goto begin;
    return 0;
} 

加载全部内容

相关教程
猜你喜欢
用户评论