C语言实现学生籍贯信息记录簿

本文实例为大家分享了C语言实现学生籍贯信息记录簿的具体代码,供大家参考,具体内容如下

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

进一步掌握和利用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;
} 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C语言使用链表实现学生籍贯管理系统

    本文实例为大家分享了C语言用链表实现学生籍贯管理系统的具体代码,供大家参考,具体内容如下 源码 #include<stdio.h> #include<stdlib.h> #include<string.h> //定义一个学生结构体 typedef struct student {     char no[12];            //学号     char name[40];          //姓名     char tele[20];          //

  • C语言实现学生籍贯信息记录簿

    本文实例为大家分享了C语言实现学生籍贯信息记录簿的具体代码,供大家参考,具体内容如下 一.任务概述(文章仅供参考) 进一步掌握和利用C语言进行课程设计的能力:进一步理解和运用结构化程序设计的思想和方法:初步掌握开发一个小型实用系统的基本方法: 二.设计功能 1.创建信息链表并以磁盘文件保存:2.读取磁盘文件并显示输出所有学生的籍贯信息:3.按学号或姓名查询其籍贯:4.按籍贯查询并输出该籍贯的所有学生:5.能添加.删除和修改学生的籍贯信息 三.功能展示 四.思维导图 五.程序源码 #include

  • C语言实现学生宿舍信息管理系统

    本文实例为大家分享了C语言实现学生宿舍信息管理系统的具体代码,供大家参考,具体内容如下 功能描述 该学生宿舍信息管理系统主要实现的功能有:创建学生宿舍信息,显示学生宿舍信息,查询学生宿舍信息,修改学生宿舍信息,删除学生宿舍信息,保存学生宿舍信息,读取学生宿舍信息.其系统功能模块图如下: 完整代码如下: #include<stdio.h> #include<stdlib.h> #include<string.h> #include<conio.h> #incl

  • C语言实现学生宿舍信息管理系统课程设计

    本文实例为大家分享了C语言实现学生宿舍信息管理系统的具体代码,供大家参考,具体内容如下 一.问题陈述 宿舍对于大学生在校生活来说相当于家的存在,而宿舍管理又是学校后勤管理的重要环节,如何直观的了解宿舍的入住情况和每位同学的住宿位置是提高工作效率的重要课题,根据我们所学的C语言和数据结构课程中有关链表的内容,为宿舍管理人员编写宿舍管理查询软件,就可以轻松满足实现上述需求. 任务: 1.为宿舍管理人员编写一个宿舍管理查询软件, 程序设计要求:1).采用交互工作方式2).可按关键字(姓名.学号.房号)

  • C语言实现学生学籍管理系统程序设计

    本文实例为大家分享了C语言实现学生学籍管理系统的具体代码,供大家参考,具体内容如下 一.题目设计及其要求 1.题目:学生学籍管理系统 用数据文件存放学生的学籍,可对学生学籍进行注册.修改.查找.统计.学籍变化等操作.(用文件保存) 2.功能要求: (1)系统以菜单方式工作: (2)登记学生的学号,姓名,性别,年龄,籍贯,学院,专业,班级: (3)修改已知学号的学生信息: (4)查找已知学号的学生信息: (5)按学号和专业输出学生籍贯表: (6)查询学生学籍变化,比如入学,转专业,退学,降级,休学

  • C语言实现学生信息管理系统(单链表)

    本文实例为大家分享了C语言实现学生信息管理系统的具体代码,供大家参考,具体内容如下 /*copyright(c)2016.烟台大学计算机学院 * All rights reserved, * 文件名称:text.Cpp * 作者:吴敬超 * 完成日期:2016年7月1日 * 版本号:codeblock * * 问题描述: 学生信息管理系统 * 输入描述: * 程序输出: 输出结果 */ #include <stdio.h> #include <stdlib.h> #include

  • C语言实现学生信息管理程序

    本文实例为大家分享了C语言实现学生信息管理程序的具体代码,供大家参考,具体内容如下 目前只有5个功能 1. 增加学生信息 2. 删除学生信息 3. 查询某学生信息 4. 列出所有学生信息 5. 按出生日期先后输出学生信息 代码: #include<stdio.h> #include<stdlib.h> #include<string.h> struct StuInfo//学生信息 { char cName[10]; char cSex; char cNumber[6];

  • C语言实现学生信息管理系统(文件版)

    本文实例为大家分享了C语言实现学生信息管理系统的具体代码,供大家参考,具体内容如下 下面是我自己用写的学生信息管理系统,为了增加数据的利用率,分为学生端和教师端,同时实现账号密码登录,以文件的形式将其存入. 代码如下 #include <stdio.h> #include <string.h> #include <string> #include<Windows.h> #define USER "TOM" // 事先定义用户名,用于登录页

  • C语言版学生信息管理系统

    本文实例为大家分享了C语言版学生信息管理系统的具体代码,供大家参考,具体内容如下 一.题目分析 1.功能概述 1)查询学生信息 2)添加学生信息 3)修改学生信息 4)删除学生信息 5)刷新学生信息 6)保存学生信息 7)输出当前学生信息 2.题目要求: 1)使用结构体建立学生信息体制 2)实现七大基本功能 3)采用文件存储学生信息 二.算法构造 1.难点解析----对文件的操作 1.1文件读取 FILE * fp; if ((fp = fopen(filename, "r")) ==

  • C语言实现学生信息管理系统(多文件)

    本文实例为大家分享了C语言实现学生信息管理系统的具体代码,供大家参考,具体内容如下 elemtype.h /***************************** * 这是学生成绩管理系统中的记录结构文件. * 文件名:elemtype.h * 作者: * 创建日期:2012-12-05 * 完成日期:2012-12-07 * 版本:1.0 * 修改记录: * * ******************************/ #ifndef ELEMTYPE #define ELEMTYP

随机推荐