二级C编程实训报告

二级C编程实训报告要求

一、任务:设计完成一个或多个C语言综合应用程序

二、报告的内容包括:

1. 程序设计的题目

2. 设计的具体任务

3. 设计的要求

4. 设计过程

5. 程序说明

6. 设计体会

三、 写作要求

1.要求独立完成设计、独立编写设计报告,若有相同者,一律视其为不合格。

2.字数不少于2000字。

3.正文格式:A4纸、小四号、宋体;

标题:加粗,宋体,四号;

打印。

备注: 封面格式见附页

天津电子信息职业技术学院 暨国家示范性软件职业技术学院

二级C编程实训报告

姓 名: 系 别: 专 业: 班 级: 指导教师: 完成时间: 2013 年1月 11日

 

第二篇:C语言高级程序设计 实训报告及详细程序

 

高级程序设计

实训报告

广西科技大学计算机学院

20##年12月

《高级程序设计》

课程实训报告

题    目:通讯录管理

完  成  人:  

专业班级:计Y113

学    号:

指导教师:  

20##年 1 月  5日

广西科技大学计算机学院

1 题目与要求

1.1 问题提出

本人计划编写一个通讯录管理系统,主要用来管理联系人得基本信息

1.2 本系统涉及的知识点

结构、数组、循环、函数、分支、指针

1.3 功能要求

1)   能输入(从键盘)通讯录的信息(增加,输入时需要能检查该姓名的通讯录的记录是否已经存在,如果存在,需要询问是否是覆盖还是增加,需要判断输入的类型是否存在)

2)   能增加通讯录信息;

3)   能查询(按姓名或者分类)通讯录的信息

4)   能修改通讯录信息;

5)   能删除指定姓名的记录信息

6)   能批量输出通讯录信息:写入指定的文件中。

7)   能批量输入通讯录信息:从指定的文件中读入。

2 功能设计

2.1 算法设计

本系统需要实现的功能要求

(1)利用switch语句设计如图1所示的主菜单:

图1 通讯录管理系统主菜单

(2)选择2后,调用查询函数,进入函数后利用if-else if语句实现一个如图2所示的菜单。

图2

3、根据所选菜单编写相应代码:

1)通讯录信息输入函数shuru():利用循环输入的方式,将有关信息存入结构数组,结构数组根据实际的人数,采用动态方式建立……

2)通讯录记录查询函数chaxun():查询某人的信息,按照姓名、手机或者QQ查找,如果找到了,则显示该人的息,如果未找到,则提示通讯录中没有此人的信息,并返回选单。

3)修改通讯录信息函数xiugai():修改某人的信息,按照姓名或者QQ查找修改,如果未找到要修改的人,则提示通讯录中没有此人的信息,并返回选单。

4)显示通讯录信息函数xianshi():显示通讯录中的所有记录。

5)通讯录记录删除函数shanchu():删除某人的信息,按照姓名或者QQ查找,如果未找到要删除的人,则提示通讯录中没有此人的信息,并返回选单。

6)导出通讯录文件函数daochu():能将通讯录的信息写入指定的文件中。

7)导入通讯录文件函数daoru():能从指定的文件中读入通讯录的信息。

8)退出通讯录程序:结束循环退出通讯录。

2.2 部分模块流程图

C语言高级程序设计 实训报告及详细程序

 

3 程序代码设计(左对齐,宋体粗四号)

内容:分模块(函数)简述其功能;模块中使用的各变量的类型及作用,包括声明数据类型(如结构体);设计过程;并列出该模块(函数)的代码。(宋体小四号)。

输入模块

1)函数原形:void caidan()

2)功 能:利用while循环语句和printf、gets、getchar、swtich函数完成对菜单的显示。

3)变量及类型:

char choice :输入字符变量。

4)说明:菜单函数会循环显示。

输入模块

1)函数原形:void shuru()

2)功 能:利用for循环语句和gets、getchar、strcpy、if-elseif函数完成对结构数组的输入,存放n个通讯录信息(姓名、电话、QQ、备注)。

3)变量及类型:

char ask :输入字符变量来判断。

int i , j :循环控制变量。

4)说明:执行完输入函数后,会在键盘缓冲区中保存回车键,后面再对字符型变量赋值时,会将缓冲区中的回车键当成数据存入变量中,所以要在某些输入语句后面加getchar()函数。(若不需说明部分可省略)

输入模块

1)函数原形:void chaxun()

2)功 能:利用while循环语句和for、if-else if、gets、getchar函数完成对通讯录信息的查询。

3)变量及类型:

char ask :输入字符变量来判断。

int i ,k :循环控制变量。

4)说明:执行查询完后返回菜单

输入模块

1)函数原形:void xiugai()

2)功 能:利用while循环语句和for、if-else if、gets、getchar、scanf,strcmp函数完成对通讯录信息的修改。

3)变量及类型:

char sure :输入字符变量来判断。

int i ,k :循环控制变量。

char name[10]:接受输入的数组。

int flag:判断修改依据。

输入模块

1)函数原形:void xianshi()

2)功 能:利用for循环语句完成对结构数组的显示,显示通讯录的整体信息。

3)变量及类型: int i ,k :循环控制变量。

输入模块

1)函数原形:void shanchu()

2)功 能:利用while循环语句和for、if-else if、gets、getchar、scanf,strcmp函数完成对通讯录信息的删除。

3)变量及类型:

char sure :输入字符变量来判断。

int i ,k :循环控制变量。

char name[10],char qq[10]:接受输入的数组。

int flag:判断修改依据。

输入模块

1)函数原形:void daochu()

2)功 能:利用for循环语句和if、fclose、fprintf函数完成对通讯录信息的导出,导出文件为address.txt

3)变量及类型:

int i ,m :循环控制变量。

输入模块

1)函数原形:void daoru ()

2)功 能:利用for循环语句和if、fclose、fprintf函数完成对通讯录信息的导入

3)变量及类型:

int i ,m :循环控制变量。

char name[15] tele[15]; qq[15] note[15];对导入函数的接收数据

4  总结

内容:

1.   程序经过4天的调试终于在放弃文件和指针的操作,终于成型。但过程中也暴露了对这两个知识不够熟练!

  1. 本人在程序设计中感想,程序应该先由简单易懂的部分入手。不要一开始就尝试难的方式,比如文件操作。而且比如自加自减的代码要考虑好应该放的位置,不然程序会很难调试。Getchar()这个函数有些地方必不可少。不然会照成程序的运行异常。每个函数的调用应该环环相扣,对程序的全局有很大的好处。

参考文献(左对齐,宋体粗四号)

内容:列出课程实训中所参考的所有书目,格式如下:

[1] 张磊,C语言程序设计(第2版),北京:高等教育版社,2009.8

[2] 张磊,C语言程序设计实验与实训指导及题解,北京:高等教育版社,2009.8

附录:程序清单

#define M 100

#include

#include

#include

int i=0;

//--------------------------------------------------------------------------------------------1

struct record

{

char name[15];

char tele[15];

char qq[15];

char note[15];

}info[M];

//--------------------------------------------------------------------------------------------2

void caidan();

void shuru();

void chaxun();

void xiugai();

void xianshi();

void shanchu();

void disp_str(char,int);

void disp_table();

void daochu();

void daoru();

//--------------------------------------------------------------------------------------------3--主函数

void main()//主函数

{

  caidan();

}

//--------------------------------------------------------------------------------------------4--菜单

void caidan()//菜单

{

char choice;

while(1)

{

     printf("\n\n");

     disp_str(' ',18);

     printf("通讯录管理程序 \n");

     disp_str('*',50);

     printf("\n");

     disp_str(' ',16);

     printf("1.通讯录信息输入 \n");

     disp_str(' ',16);

     printf("2.通讯录记录查询 \n");

     disp_str(' ',16);

     printf("3.修改通讯录信息 \n");

     disp_str(' ',16);

     printf("4.显示通讯录信息 \n"); 

     disp_str(' ',16);

     printf("5.通讯录记录删除 \n");

     disp_str(' ',16);

     printf("6.导出通讯录文件 \n");

     disp_str(' ',16);

     printf("7.导入通讯录文件 \n");

     disp_str(' ',16);

     printf("8.退出通讯录程序 \n");

     disp_str('*',50);

     printf("\n");

     disp_str(' ',14);

     printf("请输入代码选择(1~8)");

     choice=getchar();

     getchar();

     switch(choice)

     {

     case '1':

         shuru();

         break;

     case '2':

         chaxun();

         break; 

     case '3':

         xiugai();

         break;

     case '4':

         xianshi();

         break;

     case '5':

         shanchu();

         break;

     case '6':

         daochu();

         break;

     case '7':

         daoru();

         break;

     case '8':

         return;

     default:

         continue;//输入数字在1~8之外时,继续循环显示菜单

     }

}

}

//--------------------------------------------------------------------------------------------5--菜单空格和*号输出函数

void disp_str(char ch,int n)//菜单空格和*号输出函数

{

int j;

for(j=1;j<=n;j++)

     printf("%c",ch);

return;

}

//--------------------------------------------------------------------------------------------6--第一个功能输入

void shuru()//第一个功能输入

{

char ask;

while(1)

{

     printf("\n\n");

     fflush(stdin);

     printf("请输入通讯录记录\n");

     printf("姓名: ");

     gets(info[i].name);

     printf("电话: ");

    gets(info[i].tele);

     printf("qq: ");

     gets(info[i].qq);

     printf("备注: ");

     gets(info[i].note);

     //检查

     int j;

     for(j=0;j

     {

         if(strcmp(info[i].name,info[j].name)==0)

         {

             printf("名字相同了,是否覆盖?(Y或N)");

             char ch=getchar();

             getchar();

             if(ch=='Y'||ch=='y')

             {

                 strcpy(info[j].name,info[i].name);

                 strcpy(info[j].tele,info[i].tele);

                 strcpy(info[j].qq,info[i].qq);

                 strcpy(info[j].note,info[i].note);

                

             }

             i--;

         }

         else

             continue;

     }

     i++;

     printf("输入后的通讯录为:\n");

        xianshi();

     printf("\n");

     printf("继续输入记录?(Y/N)");

     ask=getchar();

     getchar();

    

     if(ask!='y'&&ask!='Y')

         break;

}

return;

}

//--------------------------------------------------------------------------------------------7--第二个功能查询

void chaxun()//第二个功能查询

{

char ask,name[15],qq[15],tele[15];

int  k,flag;

while(1)

{

     flag=0;

     disp_str(' ',19);

     printf("通讯录查询\n");

     disp_str('*',50);

     putchar('\n');

     disp_str(' ',17);

     printf("1.按姓名查询\n");

     disp_str(' ',17);

     printf("2.按 QQ 查询\n");

     disp_str(' ',17);

     printf("3.按手机查询\n");

     disp_str(' ',17);

     printf("4.返回  上层\n");

     disp_str('*',50);

     putchar('\n');

     disp_str(' ',17);

     printf("请输入代码选择(1~4)\n");

     ask=getchar();

     getchar();

     if(ask=='1')

     {

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

         gets(name);

         for(k=0;k

             if(strcmp(name,info[k].name)==0)//比较函数

             {

                 flag=1;

                 printf("\t查找成功!该人记录如下:\n");

                 disp_str('*',50);

                 printf("\n");

                 disp_table();

                 printf("%-12s%-12s%-12s%-12s\n",info[k].name,info[k].tele,info[k].qq,info[k].note);

             }

             if(!flag)

                 printf("没有找到符合条件的记录!\n");

            

             printf("请按任意键返回···");

             printf("\n");

             getchar();

     }

     else if(ask=='2')

     {

     printf("请输入qq:");

         gets(qq);

         for(k=0;k

             if(strcmp(qq,info[k].qq)==0)

             {

                 flag=1;

                 printf("\t查找成功!该人记录如下:\n");

                 disp_str('*',50);

                 printf("\n");

                 disp_table();

                 printf("%-12s%-12s%-12s%-12s\n",info[k].name,info[k].tele,info[k].qq,info[k].note);

             }

             if(!flag)

                 printf("没有找到符合条件的记录!\n");

             printf("请按任意键返回···");

             printf("\n");

             getchar();

     }

     else if(ask=='3')

     {

     printf("请输入手机号:");

         gets(tele);

         for(k=0;k

             if(strcmp(tele,info[k].tele)==0)

             {

                 flag=1;

                 printf("\t查找成功!该人记录如下:\n");

                 disp_str('*',50);

                 printf("\n");

                 disp_table();

                 printf("%-12s%-12s%-12s%-12s\n",info[k].name,info[k].tele,info[k].qq,info[k].note);

             }

             if(!flag)

                 printf("没有找到符合条件的记录!\n");

             printf("请按任意键返回···");

             printf("\n");

             getchar();

     }

     else if(ask=='4')

     {

         return;

     }

}

}

    

//--------------------------------------------------------------------------------------------8--第三个功能修改

void xiugai()//第三个功能修改

{

int k,flag;

char name[10],sure;

    printf("\n");

printf("\t请输入要修改人姓名:");

gets(name);

     while(1)

     {

        for(k=0;k

       

         if(strcmp(name,info[k].name)==0)

         {

            

                 flag=1;

                    printf("\n");

                 printf("\t查找成功!该人记录如下:\n");

                 disp_str('*',50);

                 printf("\n");

                 disp_table();

                 printf("%-12s%-12s%-12s%-12s\n",info[k].name,info[k].tele,info[k].qq,info[k].note);

                 printf("\n");

                 printf("确定修改请按Y,否者按其他键返回···");

                 sure=getchar();

                 getchar();

                 if(sure=='y'||sure=='Y')

                 {

                 printf("\n\t请输入修改后的姓名:");

                 scanf("%s",info[k].name);

                printf("\n\t请输入修改后的电话:");

                scanf("%s",info[k].tele);

                printf("\n\t请输入修改后的QQ号:");

                scanf("%s",info[k].qq);

                printf("\n\t请输入修改后的类别:");

                scanf("%s",info[k].note);

                    printf("\t修改成功!修改后记录如下:\n");

                 disp_table();

                    printf("%-12s%-12s%-12s%-12s\n",info[k].name,info[k].tele,info[k].qq,info[k].note);

                 break;

                 }

                 else

                     return;

         }

   if(flag!=1)

   {

   printf("没有找到符合条件的记录!\n");

   printf("请按任意键返回···");

   printf("\n");

   }

       getchar();

            return;

   }

}

//--------------------------------------------------------------------------------------------9--第四个功能显示

void xianshi()//第四个功能显示

{

int j;

disp_table();

disp_str('*',50);

printf("\n");

    for(j=0;j

{

        printf("%-12s%-12s%-12s%-12s\n",info[j].name,info[j].tele,info[j].qq,info[j].note);

}

disp_str('*',50);

printf("\n");

printf("该通讯录共有%d条记录!",i);

}

//--------------------------------------------------------------------------------------------10--第五个功能删除

void shanchu()//第五个功能删除

{

char ask,name[10],qq[10];

int  k,flag,l;

while(1)

{

     flag=0;

     disp_str(' ',19);

     printf("通讯录删除\n");

     disp_str('*',50);

     putchar('\n');

     disp_str(' ',17);

     printf("1.按姓名删除\n");

     disp_str(' ',17);

     printf("2.按QQ删除\n");

     disp_str(' ',17);

     printf("3.返回上层\n");

     disp_str('*',50);

     putchar('\n');

     disp_str(' ',17);

     printf("请输入代码选择(1~3)\n");

     ask=getchar();

     getchar();

     char sure;

     if(ask=='1')

     {

         printf("\n");

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

         gets(name);

         for(k=0;k

             if(strcmp(name,info[k].name)==0)

             {

                 flag=1;

                 printf("\t该人记录如下:\n");

                 disp_table();

                 printf("%-12s%-12s%-12s%-12s\n",info[k].name,info[k].tele,info[k].qq,info[k].note);

                    printf("确定删除请按Y,否者按其他键返回···");

                 sure=getchar();

                 getchar();

                 if(sure!='y'&&sure!='Y')

                     return;

                

                 for(l=k;l

                     info[l]=info[l+1];

                 printf("\t删除成功!删除后记录如下:\n");

                 i=i-1;

                 xianshi();

             }

             if(!flag)

                 printf("没有找到符合条件的记录!\n");

            

             printf("请按任意键返回···");

             printf("\n");

             getchar();

     }

     else if(ask=='2')

     {

     printf("\n");

     printf("请输入qq:");

         gets(qq);

         for(k=0;k

             if(strcmp(qq,info[k].qq)==0)

             {

                 flag=1;

                 printf("\t查找成功!该人记录如下:\n");

                 disp_table();

                 printf("%-12s%-12s%-12s%-12s\n",info[k].name,info[k].tele,info[k].qq,info[k].note);

                    printf("确定删除请按Y,否者按其他键返回···");

                 sure=getchar();

                 getchar();

                 if(sure!='y'&&sure!='Y')

                     return;

                

                 for(l=k;l

                     info[l]=info[l+1];

                 printf("\t删除成功!删除后记录如下:\n");

                 i=i-1;

                 xianshi();

             }

             if(!flag)

                 printf("没有找到符合条件的记录!\n");

             printf("请按任意键返回···");

             printf("\n");

             getchar();

     }

     else if(ask=='3')

     {

         return;

     }

}

}

//--------------------------------------------------------------------------------------------11--通讯录表头

void disp_table()//通讯录表头

{

printf("姓 名:");

disp_str(' ',6);

printf("电 话:");

disp_str(' ',6);

printf("Q Q:");

disp_str(' ',6);

printf("备 注:\n");

return;

}

//--------------------------------------------------------------------------------------------12--导出文件

void daochu()//导出文件

{

FILE *fp;

if((fp=fopen("address.txt","w"))==NULL)//只写的方式建立一个文件

{

     printf("can't open file!\n");

     return;

}

    fprintf(fp,"%-12s%-12s%-12s%-12s\n","姓名","电话","qq","备注");

for(int m=0;m

fprintf(fp,"%-12s%-12s%-12s%-12s\n",info[m].name,info[m].tele,info[m].qq,info[m].note);

   

printf("\n成功导出,导出文件名为address.txt\n");

printf("请按回车键返回菜单:\n");

fclose(fp);

getchar();

}

//--------------------------------------------------------------------------------------------13--导入文件

void daoru()//导入文件

{

char name[15];

char tele[15];

char qq[15];

char note[15];

FILE *fp;

if((fp=fopen("address.txt","r"))==NULL)//只写的方式建立一个文件

{

     printf("can't open file!\n");

     return;

}

else

{

    

     fscanf(fp,"%s%s%s%s",name,tele,qq,note);

     int j=i;

     for(int m=0;m

     {

         fscanf(fp,"%s%s%s%s",info[i].name,info[i].tele,info[i].qq,info[i].note);

         i++;

     }

     printf("导入成功!\n");

     printf("\n");

     disp_str(' ',12);

     printf("导入后的通讯录为通讯录 \n");

     xianshi();

     fclose(fp);

}

}

相关推荐