当前位置:首页 > 开发教程 > C语言 >

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

时间:2022-06-02 13:33 来源:未知 作者:等迩宛在水中央 收藏

这篇文章主要为大家详细介绍了C语言实现学生籍贯信息记录簿,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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

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

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

二、设计功能

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

三、功能展示

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

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

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

四、思维导图

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

五、程序源码

#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;
}

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


下一篇:没有了

C语言阅读排行

最新文章