1、 char num21; /学生学号 char name256;/学生姓名 char address562;/学生籍贯 struct Student *next;声明一个结构体类型Student3.模块设计(1)creat函数:添加需要录入的学生信息(2)name_surch函数:根据姓名查找学生(3)num_surch函数:根据学号查找学生(4)NativePlace_surch函数:按籍贯查找学生(5)modification_shiyan函数:修改学生信息(6)showSzechwan_No函数分别显示唐山和非唐山籍学生并非别存盘(7)print_save函数:保存文件信息(8)file
2、out函数:显示文件信息2 程序流程图 四、程序代码和运行结果程序代码#includestring.hstdlib.h#define LEN sizeof(struct Student)int n;/n为全局变量,本文件模块中各函数均可使用它struct Student *creat()/定义函数。此函数返回一个指向链表头的指针 struct Student *head; struct Student *p1,*p2; n=0; p1=p2=(struct Student *)malloc(LEN); printf(请依次输入学生的信息,输入学号为零时退出。n);学号t姓名t地址n scanf
3、(%s%s%s,p1-num,p1-name,p1-address); head=NULL; while(p1-num0!=0)/当学号是0时,退出 n=n+1; if(n=1) head=p1; else p2-next=p1; p2=p1; p1=(struct Student *)malloc(LEN);/开辟动态存储区,把起始地址付给p1 p2-next=NULL; system(cls return(head);void print_save(struct Student head) FILE *fp; struct Student *p; fp=fopen(D:stduent.tx
4、t,wb+/打开文件 if(fp=NULL) printf(文件无法打开n exit(0);n现在,有 %d 条记录,分别是:,n); p=&head; if(&head!=NULL) do printf(n学号: puts(p-num);n姓名:name);n地址: fseek(fp,0,2); if(fwrite(p,sizeof(struct Student),1,fp)!=1) printf(文件无法写入n p=p-next; while(p!=NULL); fclose(fp);/关闭文件 getchar(); system(struct Student *pt;/定义一个Stude
5、nt类型的指针char comp3;/comp为保存输入的变量int main()/一个调用这个creat函数的main函数 c void ShowView();/界面显示 void name_surch();/按姓名查找 void num_surch();/按学号查找 void NativePlace_surch();/按籍贯查找 void modification_shiyan();/修改学生信息 void showSzechwan_No();/分别显示唐山和非唐山籍学生并非别存盘 void fileout(struct Student *p);/文件输出 void print_save(
6、struct Student head); while(1) ShowView(); if(strnicmp(comp,1,3)=0)/strnicmp比较两个字符串的函数 pt=creat();/函数返回链表第一个结点的地址 else if(strnicmp(comp,2,3)=0) print_save(*pt);3,3)=0)/输出文件内容 fileout(pt);4 name_surch();5 num_surch();8 /modification(); modification_shiyan();7 showSzechwan_No();6 NativePlace_surch();0
7、 break;输入错误! return 0;void fileout(struct Student *p) int i;现在有%d条记录,分别是:rb/0x00429af0 rewind(fp); for(i=0;i puts( fclose(fp); getchar();void ShowView()/主菜单*欢迎进入学生籍贯信息记录簿*n n*n*1、添加学生信息 *n*2、保存当前信息 *n*3、显示文件中的信息 *n*4、按名字搜索 *n*5、按学号搜索 *n*6、按籍贯搜索 *n*7、分别显示唐山和非唐山籍学生并非别存盘*n*8、修改学生信息 *n*0、退出 *n*请输入您的选择:
8、gets(comp);/清屏void name_surch() char surch256;请输入要查询的人的名字: gets(surch);r不能打开文件n/指向文件的开始 while(!feof(fp)/查找 Student a; while(!feof(fp) fread(&a,sizeof(Student),1,fp);/从p指向的文件读入一组数据 if(!strcmp(a.name,surch) %s,%s,%sn,a.num,a.name,a.address); break; if(! return;查无此人 void num_surch()请输入要查询的人的学号:/0x0042a
9、ab8ERRORstrcmp(a.num,surch)void NativePlace_surch()/按籍贯查询请输入要查询的人的籍贯:文件打不开na,sizeof(struct Student),1,fp);strcmp(a.address,surch)/相当于strcmp(a.address,surch)=0void showSzechwan_No()/分别显示唐山和非唐山籍学生并非别存盘 FILE *sfp;/指向唐山籍学生文件 sfp=fopen(唐山stduent.txtwb if(sfp=NULL) FILE *ffp;/指向非唐山籍学生文件 ffp=fopen(非唐山stdue
10、nt.txt if(ffp=NULL) printf( exit(0);唐山籍学生信息: Student a;i+) fread(&/从p指向的文件读取一组数据strcmp(a.address,唐山)|!tangshantangshanshi唐山市) if(fwrite(&a,sizeof(struct Student),1,sfp)!a,sizeof(struct Student),1,ffp)! fclose(ffp); fclose(sfp);非唐山籍学生信息: if(NULL=ffp)a,sizeof(struct Student),1,ffp); if(a.num=)void mod
11、ification_shiyan()/修改学生信息 FILE *fptemp; struct Student a;请输入要修改的人的学号: fptemp=fopen(temp.txt fread(& if(0=strcmp(a.num,surch) char p;如果以上信息与你要修改的人的信息对应,请输入(y/n): scanf(%c,&p); if(Y=p|y=p)请输入要修改成的信息(学号、姓名、籍贯):getchar();学号: gets(a.num);姓名: gets(a.name);地址: gets(a.address); fwrite(&a,sizeof(struct Stude
12、nt),1,fptemp); fclose(fptemp); FILE *bb; FILE *pp; bb=fopen( pp=fopen(feof(pp)a,sizeof(struct Student),1,pp);a,sizeof(struct Student),1,bb);运行结果1. 进入界面当每一个操作结束时,系统都会自动清屏,并返回主菜单,以保证屏幕整洁。使用户能拥有一个好的心情使用此软件。输入3 ,按enter键,查看文件中所存储的所有信息。2. 添加学生信息界面3. 保存信息界面4. 按姓名查找5. 按学号查找6. 按籍贯查找7. 分别显示唐山和非唐山籍贯学生信息并存盘8. 修
13、改学生信息按提示操作,如果现实的学生的信息是你要修改的,就输入y。再输入要改成的详细信息,按enter键保存、退出。五、编程中遇到的困难和解决方法困难:1. 由于fread以及fwrite不能较熟练的应用,在实现唐山和非唐山籍学生分类时出错。2.偶尔会出现文件打开错误的情况或者乱码现象解决方法:1.看书熟悉fread和fwrite的使用规则,在此基础上对程序加以修改2.同时认真检查文件的打开格式是否出错,避免因打开方式错误而导致程序不能正常运行六、心得体会为了提高我们的实践能力,让我们学以致用,能灵活运用所学的知识进行再创造,学校特安排我们进行为期二周的Visual C+课程设计实习,并安排了
14、指导老师帮助辅导,让我们在规范化、严谨化、实用化上面有了很大进展。在此次字符统计程序开发过程中,有很多东西值得我们思考并总结。开发过程大体可分为以下几个步骤:(1)思考总体设计方案:总体结构和模块外部设计,功能分配。思考要实现整个程序大体需要的几个模块和其中用到的Visual C+语言基本操作符、语句等。(2)画出总体设计方案流程图:用流程图的形式展现你的基本编程思想。(3)流程图具体化:即将流程图中的几大模块的具体实现思考清楚,可以用流程图的形式展现并想好实现的关键代码。(4)编辑程序代码:这是一个至关重要复杂而且需要反复修改的环节,在此环节中你将发现总体设计和模块思想会存在很多问题,需不断
15、改进如何实现各函数功能,达到预期效果也将是一项繁复的工作。(5)代码的调试:在Visual C+6.0环境下输入代码并进行调试和正确运行。在调试过程中会遇到很多需要精化的地方,需要十足的耐心与细心,不断改进完善程序。(6)最后修饰:程序可以正确运行之后,再不影响程序功能的情况下,运用各种辅助性符号,使界面更加美观漂亮,操作更人性化增强程序的新意与可行性。通过这次课程设计,使我们更加熟悉的掌握了Visual C+语言的运用。帮助我们熟悉了更多Visual C+语言的功能,提高了我们的动手能力,学到了许多解决实际问题的宝贵经验同时也挖掘出了我们潜在的能力,使我们对自己更有自信,对编程也更有兴趣。我相信,只要努力、勤奋、坚持不懈,就没有什么做不到的事,不能还没开始就退缩,要勇于拼搏,敢于创新。七、参考文献 1 马安鹏.Visua
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1