C语言课程设计实验报告模板

《程序设计基础》

课程设计报告

课程设计题目

通讯录管理系统

           

指导教师:____李    萍____

班    级:__   0903班_ _ __

学生姓名:2009100333_ 闫  晓

2009100334  皇  倩

2009100335  翟少平

2009100336  谢成龙

2009100337  姚  琳

           

    完成日期: 20##年9月16日  

   

运城学院计算机科学与技术系

目录

一、课程设计目的. 3

二、课程设计内容. 3

三、总体设计. 4

四、详细设计. 4

五、调试与测试. 11


《C语言课程设计》

通讯录管理系统

一、课程设计目的

1、通过课程设计,加深对结构化设计思想的理解,能对系统功能进行分析,并设计合理的模块化结构。

2、通过课程设计,学会设计数据结构。其中包括对结构数组、链表和数据文件等知识的运用。

3、通过课程设计,提高程序开发功能,能运用合理的控制流程编写清晰高效的程序。

4、通过课程设计,训练C程序调试能力,能将一个中小型各级组织系统联调通过。

5、通过课程设计,开发一个中小型系统,掌握系统研发全过程。

6、通话课程设计,培养分析问题、解决实际问题的能力。

二、课程设计内容

设计一个实用的学生通讯录管理系统,能以简便高效的方式对通讯录进行管理和检索,具体要示:

(1)            录入:学生通讯录信息包括:姓名,地址,电话等。以结构数组              或数据文件的形式存放通讯录信息。

(2)            更新:能插入、删除通讯录信息。

(3)            浏览:按姓名为序进行通讯录信息浏览。

(4)            查询:能实现指定联系人信息查询或指定课题组人员查询功能。

(5)            系统以菜单方式工作,要求界面友好,易于操作。

三、总体设计

模块化设计

为实现系统功能,本程序主要分为六个模块。它们分别为:输入一个学生信息、删除一个学生信息、查询一个学生信息、插入一个学生信息、输出所有的学生信息、保存并且退出该程序。这六个函数再通过主函数调用分别得以实现。

主函数,首先提供了程序运行时的友好界面,列出了清单,提供用户做出选择,以便决定使用通讯录的哪种功能。然后,通过执行多分支选择语句——switch语句,分别实现其它各个函数的调用功能。

其它各个函数的功能分别如下:

creat函数用于对通讯录中的数据以文件的方式

进行读入及函数用于录入通讯录中学生的信息;

delete函数用于对通讯录中指定信息的删除;

search函数用于对通讯录中指定信息的查询;

append函数用于在通讯录中插入信息;

output函数用于对通讯录中所有信息进行浏览;

exit函数用于保存通讯录信息并且退出。

四、详细设计

(1)数据结构设计

本程序中,运用了多种数据结构。首先对于学生通讯录中各项详细信息的记录用了结构数组的形式,然后又运用链表动态地分配内存单元,在creat函数中,把保存在数组中的值再赋值给其中的一个结点,通过指针的后移,把多个数据连成一个链,形成一个链表。在这过程当中,还运用了数据文件的方式,每一次从终端输入的数据都以数据文件的形式保存到了磁盘。

对于主要数据结构的举例如下:

结构数组:

 struct person

     { char name[10];

      char addr[30];

      char tel[15];

    };

(2)模块接口设计

     由于本程序中存在很多指针,所以这个程序中被调用的函数都是空类型的,但这并没有影响最终结果的输出,反而使得函数调用的过程更加简便。

     本程序执行的入口是main函数,然后在main函数中首先调用了creat函数,这就实现了对通讯录中的数据以文件的方式进行读入。接下来在while语句中再套用switch语句实现对各个函数的调用。最后,再从main函数中结束整个程序的运行。

      其中涉及到被调用的函数有:

void creat33();

void output34();

void search34();

void append36();

void modify35();

void delete37();

(3)流程图

creat函数:

void creat33()

{

 struct person one;

    long s1;

    printf("\n请输入通讯簿名:");

    scanf("%s",filename);

    if((fp=fopen(filename,"w"))==NULL)

    {

  printf("\n不能建立通讯簿!");

  exit();

    }

    fprintf(fp,"%-20s%-30s%-50s\n","姓名","电话号码","住址");

    printf("\n请输入姓名、电话号码及住址(以0结束)\n");

    scanf("%s",one.name);

    while(strcmp(one.name,"0"))

    {

  scanf("%s%s",one.tel,one.addr);

  fprintf(fp,"%-10s%-20s%-50s\n",one.name,one.tel,one.addr);

  scanf("%s",one.name);

    }

    fclose(fp);

}

output函数:

void output34()

{

 struct person one;

    if((fp=fopen(filename,"r"))==NULL)

    {

  printf("\n不能打开通讯簿!");

  exit();

    }

    printf("\n\n%20s\n","通 讯 簿");

    while(!feof(fp))

    {

  fscanf(fp,"%s%s%s\n",one.name,one.tel,one.addr);

  printf("%-10s%-20s%-50s",one.name,one.tel,one.addr);

    }

    fclose(fp);

}

append 函数:

void append36()

{

 struct person one;

    if((fp=fopen(filename,"a"))==NULL)

    {

  printf("\n不能打开通讯簿!");

  exit();

    }

    printf("\n请输入添加的姓名、电话号码及住址\n");

    scanf("%s%s%s",one.name,one.tel,one.addr);

    fprintf(fp,"%-10s%-20s%-50s\n",one.name,one.tel,one.addr);

    fclose(fp);

}

search函数:

void search34()

 int k=0;

    char namekey[8];

    struct person one;

    printf("\n请输入姓名:");

    scanf("%s",namekey);

    if((fp=fopen(filename,"rb"))==NULL)

    { 

  printf("\n不能打开通讯簿!");

  exit();

    }

    while(!feof(fp))

    { 

  fscanf(fp,"%s%s%s\n",one.name,one.tel,one.addr);

  if(!strcmp(namekey,one.name))

  {

   printf("\n\n已查到,记录为:");

   printf("\n%-10s%-18s%-50s",one.name,one.tel,one.addr);

   k=1;

        }

    }

    if(!k) 

  printf("\n\n对不起,通讯簿中没有此人的记录。");

fclose(fp);

modify函数

void modify35()

    int m,k=0;

    long offset;

    char namekey[8];

    struct person one;

    printf("\n请输入姓名:");

    scanf("%s",namekey);

    if((fp=fopen(filename,"r+"))==NULL)

    { 

  printf("\n不能打开通讯簿!");

  exit();

    }

    while(!feof(fp))

    { 

  offset=ftell(fp);

  fscanf(fp,"%s%s%s\n",one.name,one.tel,one.addr);

  if(!strcmp(namekey,one.name))

  {

   k=1;

   break; 

  }

    }

    if(k)

 { 

  printf("\n已查到,记录为:");

        printf("\n%-10s%-18s%-50s",one.name,one.tel,one.addr);

        printf("\n请输入新姓名、电话号码及住址:");

  scanf("%s%s%s",one.name,one.tel,one.addr);

  fseek(fp,offset,SEEK_SET);

  printf("%ld",ftell(fp));

  fprintf(fp,"%-10s%-20s%-50s\n",one.name,one.tel,one.addr);

 }

    else

  printf("\n对不起,通讯簿中没有此人的记录。");

    fclose(fp);

}

delete函数

void delete37()

    int m,k=0,flag;

    long offset1,offset2;

    char namekey[8], valid[4];

    struct person one;

    printf("\n请输入姓名:");

    scanf("%s",namekey);

    if((fp=fopen(filename,"r+"))==NULL)

    { 

  printf("\n不能打开通讯簿!");

  exit();

    }

    while(!feof(fp))

    { 

  offset1=ftell(fp);

  fscanf(fp,"%s%s%s\n",one.name,one.tel,one.addr);

  if(!strcmp(namekey,one.name))

  {  

   k=1;

   break;

  }

    }

    if(k)

 {

  printf("\n已查到,记录为");

        printf("\n%-10s%-18s%-50s",one.name,one.tel,one.addr);

        printf("\n确实要删除,按1;不删除,按0:");

        scanf("%d",&m);

        if(m)

  {  

   fseek(fp,offset1,SEEK_SET);

   fprintf(fp,"%-10s%-20s%-50s\n","","","");

  }

 }

    else

  printf("\n对不起,通讯簿中没有此人的记录。");

    fclose(fp);

}

五、调试与测试

(1)    调试过程中的主要问题

由于本程序是分模块设计的,所以运行时选择完任务并且执行完任务后,又会继续回到用户选择界面,供用户继续选择任务并执行任务,整个程序以文件形式读写,所以每次都可对输入的数据进行保存。对于本程序的调试运行,总体上情况良好。

(2)  测试结果的分析与讨论

①  用户界面

②  输入学生信息

③  查找学生信息

④  删除学生信息

⑤  添加学生信息

⑥  浏览学生信息

 

第二篇:C语言课程设计实验报告-学生信息管理系统

C语言课程设计实验报告学生信息管理系统

言 程

设 计

验 报

告C

报告人:09114115 孟凡超 指导老师: 姜 林 报告日期:20xx年12月26日

C语言程序设计实验报告 C语言课程设计实验报告

1.设计目的:

学生信息管理系统设计

学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等。试设计一学生信息管理系统,使之能提供以下功能:

1. 系统以菜单方式工作

2. 学生信息录入功能---输入

3. 学生信息浏览功能---输出

4. 查询、排序功能---算法

按学号查询

按姓名查询

5. 学生信息的删除与修改(可选项)

2.总体设计:

程序设计组成框图

学生信息录入

学生信息浏览

C语言课程设计实验报告学生信息管理系统

C语言课程设计实验报告学生信息管理系统

2

C语言程序设计实验报告 流程图

C语言课程设计实验报告学生信息管理系统

3

C语言程序设计实验报告

3.详细设计:

1>函数入口说明 pr() 输出主菜单

pr2() 输出检索菜单界面 fileopen() 文件操作:打开 filesave()文件操作:保存

editname(int n) 编辑子菜单:对姓名编辑 editage(int n) 编辑子菜单:对年龄编辑 editsex(int n) 编辑子菜单:对性别编辑 editbir(int n) 编辑子菜单:对出生年月编辑 editadd(int n) 编辑子菜单:对住址编辑 edittel(int n) 编辑子菜单:对电话进行编辑

editemail(int n) 编辑子菜单:对电子邮件地址编辑 last(int n) 显示翻页致末尾的信息 edit(int n) 信息编辑函数 del(int n) 删除信息的函数 editpr(int n) 输出编辑界面 jsid() 检索:按学号 jsname() 检索:按姓名 writeinfo() 录入、添加信息 viewinfo() 学生信息查看 main() 主函数 2>调用关系

C语言课程设计实验报告学生信息管理系统

3>参数说明

editname(int n)、editage(int n)、editsex(int n) 、editbir(int n) 、editadd(int n) 、edittel(int n)、editemail(int n)、last(int n)、edit(int n)、del(int n)、editpr(int n) 函数中的n都为检索中确定的学生数组下标。

4

C语言程序设计实验报告 4.调试与测试:

1>调用pr2()函数(检索界面)一闪而过。

解决方法:添加getchar()语句使程序暂停。

2>无法有效的控制输出函数循环终止。

解决方法:添加全局变量“stunum”,使用该全局变量来记录学生总数,从而控制输出循环的次数。

3>查询函数数据量过多时同时输出,先输出的内容无法查看,或需用户自行查看。

解决方法:添加getchar()语句使程序暂停,当用户按Enter时继续。

4>文件在打开和保存时有问题。

解决方法:调整文件的打开方式,从原来的单纯的w+修改为添加一个if语句,当没有文件时执行w+的操作,否则执行r+。避免了原存储文件被覆盖的问题。

5

C语言程序设计实验报告 5.源程序清单和执行结果:

#include<stdio.h> #include<conio.h> #include<string.h> #include<stdlib.h> int stunum=0; struct student { int id; char name[30]; int age; char sex[2]; char birthday[9]; char add[80]; char tel[15]; char email[25]; }stu[100]; void pr() { system("cls"); printf("******学生信息管理系统******"); printf("\n----------V 1.0.0 ----------"); printf("\n您想要:"); printf("\n 1.录入学生信息"); printf("\n 2.浏览学生信息"); printf("\n 3.检索学生信息"); printf("\n 4.退出信息管理"); printf("\n-----By 09114115 孟凡超-----"); printf("\n****************************\n"); } void pr2() { void jsid(); void jsname(); int a; char ch; while (a) { system("cls"); printf("******学生信息管理系统******"); printf("\n----------检 索----------"); printf("\n您想要:"); printf("\n 1.按学号检索"); printf("\n 2.按姓名检索"); printf("\n 3.返回主菜单"); printf("\n\n-----By 09114115 孟凡超-----"); printf("\n****************************\n"); ch=getchar(); switch(ch) { case '1':jsid();break; case '2':jsname();break; case '3':a=0;break; } } } void fileopen() { FILE *fp; int n; if((fp=fopen("data","r+"))==NULL) fp=fopen("data","w+"); for(n=0;n<100;n++) fread(&stu[n],sizeof(struct student),1,fp);fread(&stunum,4,1,fp);fclose(fp); } void filesave() { int n; FILE *fp; fp=fopen("data","r+");

6

C语言程序设计实验报告 for(n=0;n<100;n++) fwrite(&stu[n],sizeof(struct student),1,fp); fwrite(&stunum,4,1,fp); fclose(fp); } void editname(int n) { printf("\n新姓名:"); scanf("%s",stu[n].name); } void editage(int n) { printf("\n新年龄:"); scanf("%d",&stu[n].age); } void editsex(int n) { printf("\n新性别:"); scanf("%s",stu[n].sex); } void editbir(int n) { printf("\n新出生年月"); scanf("%s",stu[n].birthday); } void editadd(int n) { printf("\n新地址:"); scanf("%s",stu[n].add); } void edittel(int n) { printf("\n新电话:"); scanf("%s",stu[n].tel); } void editemail(int n) { printf("\n新E-mail:"); scanf("%s",stu[n].email); } void last(int n) { if(n==stunum) system("cls"); //清屏 printf("******学生信息管理系统******"); printf("\n----------检 索----------"); printf("\n已检索到末尾。"); printf("\nPress any key to continue.."); printf("\n\n-----By 09114115 孟凡超-----"); printf("\n****************************\n"); } void edit(int n) { char ch; int a=1,b; while (a) { system("cls"); printf("******学生信息管理系统******"); printf("\n----------修 改----------"); printf("\n请输入你想修改的内容:"); printf("\n1.姓名 2.年龄 3.性别 4.出生年月 5.地址 6.电话 7.E-mail\n"); printf("\n\n-----By 09114115 孟凡超-----"); printf("\n****************************\n"); getchar(); ch=getchar(); switch(ch) {

7

C语言程序设计实验报告 case '1':editname(n);break; case '2':editage(n);break; case '3':editsex(n);break; case '4':editbir(n);break; case '5':editadd(n);break; case '6':edittel(n);break; case '7':editemail(n);break; } b=1; while (b) { printf("\n确认吗?(y/n)"); getchar(); ch=getchar(); switch(ch) { case 'Y': case 'y':b=0;a=0;break; case 'N': case 'n':b=0;break; } } } } void del(int n) { int a; for(a=n;a<stunum;a++) { strcpy(stu[a].name,stu[a+1].name); stu[a].age=stu[a+1].age; strcpy(stu[a].sex,stu[a+1].sex); strcpy(stu[a].birthday,stu[a+1].birthday); strcpy(stu[a].add,stu[a+1].add); strcpy(stu[a].tel,stu[a+1].tel); strcpy(stu[a].email,stu[a+1].email); } stunum--; printf("删除成功!press Enter to continue.."); } int editpr(int n) { int a=1; char ch; while(a) { getchar(); printf("\n您想要:"); printf("\n\n1.修改学生信息"); printf("\n2.删除该条信息"); printf("\n3.返回上级菜单"); printf("\n4.查看下条信息"); ch=getchar(); switch(ch) { case '1':edit(n),a=0;break; case '2':del(n),a=0;break; case '3':a=0;return(0);break; case '4':a=0;break; } } } void jsid() { int n,i,j=0; system("cls"); printf("******学生信息管理系统******"); printf("\n----------检 索----------"); printf("\n请输入想要检索的学号:"); scanf("%d",&n); if(n<=stunum) { n=n--;

//拷贝后一个学生信息到前一个人上。 8

C语言程序设计实验报告 printf("学号 姓 名 年龄 性别 出生年月\n"); printf("%4d ",stu[n].id); printf("%12s ",stu[n].name); printf("%4d ",stu[n].age); printf("%4s ",stu[n].sex); printf("%8s \n",stu[n].birthday); printf("\n\n\n学号 电 话 E-mail 地址\n"); printf("%4d ",stu[n].id); printf("%15s ",stu[n].tel); printf("%15s ",stu[n].email); printf("%s\n", stu[n].add); j=editpr(n); i++; } if(i==0) { printf("\nError:无此学生。"); printf("\n-----By 09114115 孟凡超-----"); printf("\n****************************\n"); } else { if(j==0) goto end; else { system("cls"); last(n); getchar(); } } end:getchar(); } void jsname() { int n,j,i=0; char m[30]; system("cls"); printf("******学生信息管理系统******"); printf("\n----------检 索----------"); printf("\n请输入想要检索的姓名:"); scanf("%s",m); for(n=0;n<stunum;n++) { if(strcmp(m,stu[n].name)==0) { system("cls"); printf("学号 姓 名 年龄 性别 出生年月\n"); printf("%4d ",stu[n].id); printf("%8s ",stu[n].name); printf("%4d ",stu[n].age); printf("%4s ",stu[n].sex); printf("%8s \n",stu[n].birthday); printf("\n\n\n学号 电 话 E-mail 地址\n"); printf("%4d ",stu[n].id); printf("%15s ",stu[n].tel); printf("%15s ",stu[n].email); printf("%s\n", stu[n].add); i++; if((j=editpr(n))==0) break; } } if(i==0) printf("\nError:无此学生。"); if(j!=0) last(n); getchar(); getchar(); } void writeinfo() { int a,n=1,m;

9

C语言程序设计实验报告 char ch; while (n) { a=stunum; system("cls"); printf("ID:"); stu[a].id=(a+1); printf("%d",stu[a].id); printf("\nName:"); scanf("%s",&stu[a].name); printf("\nAge:"); scanf("%d",&stu[a].age); printf("\nSex:"); scanf("%s",&stu[a].sex); printf("\nBirthday(E.g 20090101):"); scanf("%s",&stu[a].birthday); printf("\nAddress:"); scanf("%s",&stu[a].add); printf("\nTel:"); scanf("%s",&stu[a].tel); printf("\nE-mail:"); scanf("%s",&stu[a].email); m=1; while (m) //做一个循环,直到m=0时跳出 { system("cls"); printf("ID:"); printf("%d",stu[a].id); printf("\nName:"); printf("%s",stu[a].name); printf("\nAge:"); printf("%d",stu[a].age); printf("\nSex:"); printf("%s",&stu[a].sex); printf("\nBirthday:"); printf("%s",stu[a].birthday); printf("\nAddress:"); printf("%s",stu[a].add); printf("\nTel:"); printf("%s",stu[a].tel); printf("\nE-mail"); printf("%s",stu[a].email); printf("\n请选择:1.确认并继续 2.重新填写 3.放弃并返回 4.确认并返回"); ch=getchar(); switch(ch) { case '1':m=0;stunum++;break; case '2':stunum,m=0;break; case '3':m=0,n=0;break; //选择此项时,m=0,循环终止 case '4':m=0,n=0;a=stunum++;break; } } } } void viewinfo() { int count=1,i,n=1,pagenum=1,page=stunum/5+1; //设定变量控制翻页 char ch; while (n) { system("cls"); printf("学号 姓 名 年龄 性别 出生年月\n"); for(i=count-1;i<count+4&&i<stunum;i++) { printf("%4d ",stu[i].id); printf("%12s ",stu[i].name); printf("%4d ",stu[i].age); printf("%4s ",stu[i].sex); printf("%8s \n",stu[i].birthday); } printf("\n\n\n学号 电 话 E-mail 地址\n"); for(i=count-1;i<count+4&&i<stunum;i++)

10

C语言程序设计实验报告 { printf("%4d ",stu[i].id); printf("%15s ",stu[i].tel); printf("%15s ",stu[i].email); printf("%s\n", stu[i].add); } printf("\n1.上一页 2.下一页 0.退出 共学生%d人,第%d页,共%d页\n",stunum,pagenum,page);

ch=getchar(); switch(ch) { case '1':pagenum--; if(pagenum==0) count=(page-1)*5+1,pagenum=page; else count=(pagenum-1)*5+1;break; case '2':pagenum++; if(pagenum>page) count=1,pagenum=1; else count=(pagenum-1)*5+1;break; case '0':n=0;break; } } } void main() //主函数 { int n=1; char ch; fileopen(); //文件打开 while (n) { pr(); ch=getchar(); switch(ch) //switch语句选择功能 { case '1':writeinfo();break; case '2':viewinfo();break; case '3':pr2();break; case '4':n=0;break; } } filesave();文件保存 }

11

C语言程序设计实验报告 6.实验心得:

1)

2)

3)

4)

5)

6) 对C语言的编程实践有所认识。 在遇到程序调试不通过时,会通过缩小范围的分析来锁定问题所在。 通过这次实验,熟悉了从自然语言转换成伪代码再转换为流程图的过程。 在程序中设定合适的全局变量,可以简化程序的编写难度。 运用函数可以减少编写时的代码量,也使程序条理清晰。 通过本次C语言上机实验,我对这个介于人类与非人类之间的计算机编程

语言有了一定的体验。随着实验的成功与报告的完成,有点微微的成就感使人难忘。伴随着学习的深入,我发现高深的东西还有很多很多,等待着我自己去挖掘。对C语言的学习,我会加倍努力。

12

相关推荐