当前位置:文档之家› 《C语言课程设计》实验报告

《C语言课程设计》实验报告

《C语言课程设计》报告学院:信息工程学院专业:信息管理与信息系统设计题目:通讯录程序设计班级:2016级一班学号:201601510138 姓名:张进步指导教师:杨菲菲时间:12.24学生通讯管理系统1.1 设计目的学习如何实现一个复杂的信息管理系统——学生通讯管理系统,能够实现老师对学生基本信息的记录、查询、修改。

通过本次学习,读者能够掌握:(1)如何设计主菜单和子菜单,以及各级菜单的响应与返回操作;(2)如何合理设计不同的结构体对系统中多个实体进行封装;(3)如何合理设计多个结构体数组管理不同实体对应的数据;(4)如何对复杂的函数过程进行拆分,用多个子函数进行封装;(5)进一步熟悉文件读取的相关操作。

1.2需求分析本章的学生信息管理系统的主要功能面向老师,能够实现对学生信息进行录入、修改、查询。

学生信息方面的功能需求如下。

(1)新增学生信息,包括姓名、籍贯、电话号码(2)、电子邮箱。

(2)修改学生信息,可以选择对某个学生的某个属性值进行修改。

(3)查找学生信息,即输入要查找的学生学号,实现学生信息查询。

(4)显示所有学生信息,并以列表的形式清晰呈现。

1.3总体设计系统功能结构图如图所示;学生信息管理系统学生信息管理模块:包括4个子模块,分别是学生信息的录入,学生信息的修改,学生信息的查询,学生信息的浏览。

1.4详细设计与实现1.4.1 预处理及数据结构1.头文件本项目涉及4个头文件,其中#include<string.h>使用字符串的函数的时候需要添加此头文件,#include<stdio.h>#include<stdlib.h> /*system使用的函数*/#include<conio.h> /*getchar、getch函数使用的头文件*/#include<string.h> /*strcmp比较2个字符串是否一样*/2.宏定义LEN sizeof(struct student)表示struct student的长度。

DATA是按格式输出结构体的各项数据,能够方便输出操作,减少代码量。

#define_CRT_SECURE_NO_W ARNINGS#include<stdio.h>#include<stdlib.h>#include<conio.h>#include<string.h>#define LEN sizeof(struct student)#define FORMAT "%-8d%-15s%-15s%-15d%-15d%-15s\n"#define DATA stu[i].numb,stu[i].name,stu[i].nat,stu[i].num1,stu[i].num2,stu[i].mail3.结构体利用一个结构体struct studentstruct student/*定义学生信息结构体*/{int numb;/*学号*/char name[15];/*姓名*/char nat[16];/*籍贯*/int num1;/*电话号码1*/int num2;/*电话号码2*/char mail[40];/*邮箱*/};4.全局变量分别利用全局变量结构体数组struct student stu[50];来记录所有学生的基本信息,避免程序运行过程中多次初始化,方便各个式子函数调用。

struct student stu[50];1.4.2 主函数1.功能设计主函数显示系统主界面,提供5个选项供用户选择,分别是退出、录入信息、修改信息、查询信息、浏览信息。

子系统功能执行完还可以回到主界面,供用户执行其他操作。

用户输入0可以直接退出系统,输入不在0-4之间的数字,不显示信息,等待用户输入正确数字。

2.实现代码1)函数声明部分void in();/*录入学生通讯信息*/void show();/*浏览学生通讯信息*/void modify();/*修改学生通讯信息*/void menu();/*主菜单*/void search();/*查找学生通讯信息*/2)函数实现部分(1)main函数主函数首先调用void menu()函数绘制主界面,在主界面中会提示用户输入数字,然后利用switch 语句根据用户的输入,执行相应的操作,比如用户输入1,系统会进入录入学生信息界面。

Switch语句被镶嵌在一个while循环中,用于执行完某个子系统的功能后,自动回到主界面,等待输入新的操作选项,周而复始,指导用户输入0退出系统结束程序。

void main()/*主函数*/{ int n;menu();scanf("%d",&n);/*输入选择的编号*/while(n){ switch(n){ case 1: in();break;case 2: search();break;case 3: modify();break;case 4: show();break;default:break;}_getch();menu();/*执行完功能再次回到主界面*/scanf("%d",&n);}}(2)void menu()函数该函数绘制系统主界面的菜单选项。

其中,system(“cls”)函数实现了清屏的功能,执行完子系统功能后再次回到系统主界面时,需要先清屏后绘制。

void menu(){system("cls");/*清屏函数*/printf("\n\n\n\n\n");printf("\t\t|---------------------STUDENT-------------------|\n");printf("\t\t|\t 0.退出|\n");printf("\t\t|\t 1.录入信息|\n");printf("\t\t|\t 2.查询信息|\n");printf("\t\t|\t 3.修改信息|\n");printf("\t\t|\t 4.浏览信息|\n");printf("\t\t|-----------------------------------------------|\n\n");printf("\t\t\tchoose(0-4):");}核心界面系统主界面如图所示,提供四个选项,分别可以进入四个子系统,输入0直接退出系统。

输入不在0-4之间的数字,不显示信息,等待用户输入正确数字。

(3)void search()函数该函数实现查找学生信息的功能,该函数作为修改学生信息的基础,首先需要查询到该学生,然后才能进行修改操作。

void search()/*自定义查找函数*/{ FILE *fp;int snum,i,m=0;char ch[2];if((fp=fopen("D:data.txt","rb"))==NULL){ printf("不能打开\n");return;}while(!feof(fp)) if(fread(&stu[m],LEN,1,fp)==1) m++;fclose(fp);if(m==0) {printf("没有记录\n");return;}printf("请输入学号:");scanf("%d",&snum);for(i=0;i<m;i++)if(snum==stu[i].numb)/*查找输入的学生信息是否在记录*/{ printf("查找到该学生信息是否显示?(y/n)");scanf("%s",ch);if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0){printf("学号姓名籍贯电话1 电话2 电子邮箱\t\n");printf(FORMAT,DATA);/*将查找到的结果按指定形式输出*/break;}}if(i==m) printf("为查找到该生信息\n");/*未找到要查找的信息*/}(4)void modify()修改函数该函数实现修改学生信息的功能。

首先search()查找函数是基础,找到后询问是否修改,修改时重新输入该生信息,输入完毕后,调用save函数将修改后的信息存入文件。

并提示用户学生信息修改成功,结束函数。

void modify()/*自定义修改函数*/{ FILE *fp;int i,j,m=0,snum;if((fp=fopen("D:data.txt","r+"))==NULL){ printf("不能打开\n");return;}while(!feof(fp))if(fread(&stu[m],LEN,1,fp)==1) m++;if(m==0){printf("没有记录\n");fclose(fp);return;}show();printf("请输入要修改的学生的学号\n");printf("要修改的学号:");scanf("%d",&snum);for(i=0;i<m;i++){if(snum==stu[i].numb)/*检索记录中是否有要修改的信息*/{printf("找到学生信息您可以修改\n");printf("姓名:");scanf("%s",stu[i].name);/*输入名字*/printf("籍贯:");scanf("%s",&stu[i].nat);/*输入籍贯*/printf("电话号码1:");scanf("%d",&stu[i].num1);/*输入电话号码1*/printf("电话号码2:");scanf("%d",&stu[i].num2);/*输入电话号码2*/printf("电子邮箱:");scanf("%s",&stu[i].mail);/*输入电子邮箱*/printf("修改成功!");if((fp=fopen("D:data.txt","wb"))==NULL){ printf("不能打开\n");return;}for(j=0;j<m;j++)/*将新修改的信息写入指定的磁盘文件中*/ if(fwrite(&stu[j] ,LEN,1,fp)!=1){ printf("未能保存"); _getch(); }fclose(fp);return ;}}printf("没有找到匹配信息\n");}(5)void show()函数该函数是为了按格式显示所有学生的信息。

相关主题