C语言课程设计.docx
《C语言课程设计.docx》由会员分享,可在线阅读,更多相关《C语言课程设计.docx(18页珍藏版)》请在冰豆网上搜索。
C语言课程设计
C语言与程序设计课程设计
学生籍贯信息记录簿设计
学院信息工程系
班级物联1301班
学号131408119
姓名滕玲
一.设计目的
该软件主要是编辑一个学生籍贯信息记录簿记录每个学生信息,包括:
学号、姓名、籍贯。
具体功能:
1.创建信息链表并以磁盘文件保存;
2.读取磁盘文件并显示输出所有学生的籍贯信息;
3.按学号或姓名查询其籍贯;
4.按籍贯查询并输出该籍贯的所有学生;
5.能添加、删除和修改学生的籍贯信息;
二.总体设计
三.详细设计
1.学生基本信息的录入
这部分的功能主要包括信息的录入,首先按程序提示输入学生的学号,姓名,籍贯等。
在录入数据的同时,系统将对信息的合法性进行检验。
若用户输入不合法的信息,则被系统要求重新输入;若合法性成立则录入完毕后系统将返回主页面。
主页面还有显示学生的全部信息,并且这些信息都会写到你所指定的文本文件中。
2.显示学生信息
此功能是将原录入的学生信息读出,并在屏幕上显示出来,并且录入到你所指定的文本文件中。
3.学生信息读取
进入该项功能界面后,用户可以对学生的个人信息进行查看,并且录入到你所指定的文本文件中。
4.按学号或姓名查找学生信息
此项功能可以根据用户输入的选择查处该学生的所有信息,并且录入到你所指定的文本文件中。
5.删除和修改个人信息
选择此项功能后,系统将会自动在屏幕上显示按学号录入原来同学的个人信息,输入后进行修改,并且录入到你所指定的文本文件中。
6.退出系统,结束任务
四.调试与测试
在VisualC++6.0环境下输入代码并进行调试和正确运行
五.源程序清单和执行结果
#include
#include
#include
#defineLENsizeof(structStudent)
structStudent
{
charnum[21];
charname[256];
charaddress[562];
structStudent*next;
};
intn;//n为全局变量,本文件模块中各函数均可使用它
structStudent*creat()//定义函数。
此函数返回一个指向链表头的指针
{
structStudent*head;
structStudent*p1,*p2;
n=0;
p1=p2=(structStudent*)malloc(LEN);
printf("请依次输入学生的信息,输入学号为零时退出。
\n");
printf("请输入学生的学号:
\n");
gets(p1->num);
printf("请输入学生的姓名:
\n");
gets(p1->name);
printf("请输入学生的地址:
\n");
gets(p1->address);
head=NULL;
while(p1->num[0]!
='0')//当学号是0时,退出
{
n=n+1;
if(n==1)
head=p1;
else
p2->next=p1;
p2=p1;
p1=(structStudent*)malloc(LEN);//开辟动态存储区,把起始地址付给p1
printf("请输入学生的学号:
\n");
gets(p1->num);//输入其他学生的学号和成绩
printf("请输入学生的姓名:
\n");
gets(p1->name);
printf("请输入学生的地址:
\n");
gets(p1->address);
}
p2->next=NULL;
system("cls");
return(head);
}
voidprint_save(structStudenthead)
{
FILE*fp;
structStudent*p;
fp=fopen("D:
\\stduent.txt","ab+");//打开文件
if(fp==NULL)
{
printf("文件无法打开\n");
exit(0);
}
printf("\n现在,有%d条记录,分别是:
\n",n);
p=&head;
if(&head!
=NULL)
do
{
printf("\n学号:
");
puts(p->num);
printf("\n姓名:
");
puts(p->name);
printf("\n地址:
");
puts(p->address);
fseek(fp,0,2);
if(fwrite(p,sizeof(structStudent),1,fp)!
=1)
printf("文件无法写入\n");
p=p->next;
}while(p!
=NULL);
fclose(fp);//关闭文件
getchar();
system("cls");
}
structStudent*pt;//定义一个Student类型的指针
charcomp[3];//comp为保存输入的变量
intmain()//一个调用这个creat函数的main函数c
{
voidShowView();//界面显示
voidname_surch();//按姓名查找
voidnum_surch();//按学号查找
voidNativePlace_surch();//按籍贯查找
voidDelete_shiyan();//删除学生信息
voidmodification_shiyan();//修改学生信息
voidfileout(structStudent*p);//文件输出
voidprint_save(structStudenthead);
while
(1)
{
ShowView();
if(strnicmp(comp,"1",3)==0)//strnicmp比较两个字符串的函数
{
pt=creat();//函数返回链表第一个结点的地址
}
elseif(strnicmp(comp,"6",3)==0)
{
print_save(*pt);
}
elseif(strnicmp(comp,"3",3)==0)//输出文件内容
{
fileout(pt);
}
elseif(strnicmp(comp,"2",3)==0)
{
name_surch();
}
elseif(strnicmp(comp,"7",3)==0)
{
num_surch();
}
elseif(strnicmp(comp,"9",3)==0)
{
//modification();
modification_shiyan();//修改学生信息
}
elseif(strnicmp(comp,"4",3)==0)
{
//Delete();
Delete_shiyan();
}
elseif(strnicmp(comp,"5",3)==0)
{
showSzechwan_No();
}
elseif(strnicmp(comp,"8",3)==0)
{
NativePlace_surch();
}
elseif(strnicmp(comp,"0",3)==0)
{
break;
}
else
{
printf("输入错误!
!
!
!
!
!
\n");
}
getchar();
system("cls");
}
return0;
}
voidfileout(structStudent*p)
{
FILE*fp;
printf("现在有%d条记录,分别是:
\n",n);
fp=fopen("D:
\\stduent.txt","rb");//0x00429af0
if(fp==NULL)
{
printf("文件无法打开\n");
exit(0);
}
rewind(fp);
while(!
feof(fp))
{
fread(p,sizeof(structStudent),1,fp);//从文件中读取一块数据
printf("%-15s",p->num);
printf("%-15s",p->name);
printf("%-15s",p->address);
puts("\n");
}
fclose(fp);
getchar();
system("cls");
}
voidShowView()//主菜单
{
printf("*******************************************************************************\n");
printf("**********************欢迎进入学生籍贯信息记录簿*******************************\n");
printf("*******************************************************************************\n");
printf("****1、cin添加*****\n");
printf("****2、namesurch按名字搜索*****\n");
printf("****3、fileout显示文件中的信息*****\n");
printf("****4、delete删除学生信息*****\n");
printf("****5、showSzechwan_No分别显示四川和非四川籍学生并非别存盘*****\n");
printf("****6、save保存当前信息*****\n");
printf("****7、numsurch按学号搜索*****\n");
printf("****8、nativeplace安籍贯查询*****\n");
printf("****9、modif修改学生信息*****\n");
printf("****0、break退出*****\n");
printf("*******************************************************************************\n");
printf("********************请输入您的选择¥¥:
");
gets(comp);
system("cls");//清屏
}
voidname_surch()
{
FILE*fp;
charsurch[256];
printf("请输入要查询的人的名字:
\n");
gets(surch);
fp=fopen("D:
\\stduent.txt","r");//0x00429af0
if(fp==NULL)
{
printf("不能打开文件\n");
exit(0);
}
rewind(fp);//指向文件的开始
while(!
feof(fp))//查找
{
Studenta;
while(!
feof(fp))
{
fread(&a,sizeof(Student),1,fp);//从p指向的文件读入一组数据
if(!
strcmp(a.name,surch))
{
printf("%s,%s,%s\n",a.num,a.name,a.address);
break;
}
}
if(!
feof(fp))
{return;}
else
{
printf("查无此人····\n");
}
}
fclose(fp);
getchar();
system("cls");
}
voidnum_surch()
{
FILE*fp;
charsurch[256];
printf("请输入要查询的人的学号:
");
gets(surch);
fp=fopen("D:
\\stduent.txt","rb");//0x0042aab8
if(fp==NULL)
{
printf("ERROR");
exit(0);
}
rewind(fp);//指向文件的开始
while(!
feof(fp))//查找
{
Studenta;
while(!
feof(fp))
{
fread(&a,sizeof(Student),1,fp);//从p指向的文件读入一组数据
if(!
strcmp(a.num,surch))
{
printf("%s,%s,%s\n",a.num,a.name,a.address);
break;
}
}
if(!
feof(fp))
{return;}
else
{
printf("查无此人····\n");
}
}
fclose(fp);
getchar();
system("cls");
voidNativePlace_surch()//按籍贯查询
{
FILE*fp;
charsurch[256];
printf("请输入要查询的人的籍贯:
\n");
gets(surch);
fp=fopen("D:
\\stduent.txt","rb");//0x00429af0
if(fp==NULL)
{
printf("文件打不开\n");
exit(0);
}
rewind(fp);//指向文件的开始
Studenta;
while(!
feof(fp))
{
fread(&a,sizeof(structStudent),1,fp);//从p指向的文件读入一组数据
if(!
strcmp(a.address,surch))//相当于strcmp(a.address,surch)==0
{
printf("%s,%s,%s\n",a.num,a.name,a.address);
}
}
if(!
feof(fp))
{return;}
fclose(fp);
getchar();
system("cls");
}
voidDelete_shiyan()//删除学生信息
{
FILE*fp;
FILE*fptemp;
charsurch[256];
printf("请输入要删除的人的学号:
\n");
gets(surch);
fp=fopen("D:
\\stduent.txt","rb");//0x00429af0
fptemp=fopen("D:
\\temp.txt","wb");
if(fp==NULL)
{
printf("文件打不开\n");
exit(0);
}
Studenta;
while(!
feof(fp))
{
mark:
fread(&a,sizeof(structStudent),1,fp);//从p指向的文件读入一组数据fp=0x0042aab8
if(0==strcmp(a.num,surch))
{
charp;
printf("%s,%s,%s\n",a.num,a.name,a.address);
printf("如果以上信息与你要删除的人的信息对应,请输入(y/n):
\n");
scanf("%c",&p);
if('Y'==p||'y'==p)
{
gotomark;
}
}
if(strcmp(a.num,surch)!
=0)
{
fwrite(&a,sizeof(structStudent),1,fptemp);
}
}
fclose(fp);
fclose(fptemp);
FILE*aa;
FILE*bb;
aa=fopen("D:
\\stduent.txt","wb");
bb=fopen("D:
\\temp.txt","rb");
while(!
feof(bb))
{
fread(&a,sizeof(structStudent),1,bb);
fwrite(&a,sizeof(structStudent),1,aa);
}
getchar();
system("cls");
}
voidmodification_shiyan()//修改学生信息
{
FILE*fp;
FILE*fptemp;
structStudenta;
charsurch[256];
printf("请输入要修改的人的学号:
\n");
gets(surch);
fp=fopen("D:
\\stduent.txt","rb");//0x0042aab8
fptemp=fopen("D:
\\temp.txt","wb");
if(fp==NULL)
{
printf("文件打不开\n");
exit(0);
}
rewind(fp);//指向文件的开始
while(!
feof(fp))
{
fread(&a,sizeof(structStudent),1,fp);//从p指向的文件读入一组数据fp=0x0042aab8
if(0==strcmp(a.num,surch))
{
charp;
printf("%s,%s,%s\n",a.num,a.name,a.address);
printf("如果以上信息与你要修改的人的信息对应,请输入(y/n):
\n");
scanf("%c",&p);
if('Y'==p||'y'==p)
{
printf("请输入要修改成的信息(学号、姓名、籍贯):
\n");getchar();
printf("学号:
");
gets(a.num);
printf("姓名:
");
gets(a.name);
printf("地址:
");
gets(a.address);
}
}
fwrite(&a,sizeof(structStudent),1,fptemp);
}
fclose(fp);
fclose(fptemp);
FILE*bb;
FILE*pp;
bb=fopen("D:
\\stduent.txt","wb");//0x0042aab8
pp=fopen("D:
\\temp.txt","rb");
while(!
feof(pp))
{
fread(&a,sizeof(structStudent),1,pp);
fwrite(&a,sizeof(structStudent),1,bb);
}
getchar();
getchar();
system("cls");
}
}