当前位置:文档之家› C语言程序设计题库管理系统

C语言程序设计题库管理系统

程序设计基础课程设计报告班级:计算机科学及技术1103班姓名:杨广宇指导教师: 胡宏涛完成日期:2012年9月6日(题目)1.设计题目及要求(简要介绍课程设计题目内容及要求。

)1设计内容要求输入试题(仅限选择题和填空题)基本信息,实现试题浏览.,查询,修改功能,并将数据保存至文本文件。

2要求功能完善,界面友好。

2.算法设计及描述(要求有相关流程图)2.1 算法设计及描述(描述算法设计、实现过程。

)1.提供可操作的主菜单:输出主菜单,用户可根据菜单来选择操作。

根据客户输入的选项来运行不同的功能,运行不同的函数。

2.。

试题信息的录入函数:按照提示输入题的题号,题目内容,并提示用户是否继续录入,每输入一个记录,全局变量n 就自增,最后最为函数的返回值返回。

3.保存试题信息函数:将文件的所有数据通过fprintf来写入指定文本文档,完成后关闭文件,没有返回值4. 载入试题信息函数:通过fopen函数打开指定文件,通过fscanf来读取文件里的数据,最后返回记录数,避免了每次打开时都要输入数据的麻烦。

5. 查询记录函数:细分为按题号,题目两种方式来进行查询记录,并能对查询记录不存在进行提示。

遍历所有结构体找出符合的输出。

6.修改记录函数:首先判断用户要修改的试题序号是否存在,进行相应的系统提示,然后遍历所有记录找出符合的,按照提示依次进行修改项目,返回记录值不变(没增加也没减少)。

7. 删除记录函数:首先判断用户要删除的试题序号是否存在,进行相应的系统提示,然后遍历所有记录找出符合的删除,冰讲后面的所有数据向前移动一个位置,记录数减一并返回。

2.2 主要流程图(用N—S图描述。

)1,、输入函数2、保存函数3、载入函数4、查询函数5、修改函数6、删除函数3.设计软硬件环境硬件设备系统:Microsoft Windows XP Professional 版本2002机型:Inter ® Core™2 Duo CPU E8400 @ 3.00GHz 2.99GHz, 2.00 GB内存软件设备Microsoft Visual C++ 6.0应用程序调试4.源程序代码清单#include<stdio.h>#include<stdlib.h>#include<string.h>typedef struct{char tihao[10]; //题号char timu[15]; //题目}Data;Data da[80];int menu_select(){char c;do{system("cls");printf("\t\t\t ========题库管理系统======== \n");printf("\t\t\t ┌───────────┐\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\t │ 5. 题目文件操作│\n"); //包括保存,读取和复制printf("\t\t\t │0. 退出管理系统│\n");printf("\t\t\t └───────────┘\n");printf("\t\t\t ============================ \n");printf("\n\t\t请您选择(0-5):");c=getchar();}while(c<'0'||c>'5');return(c-'0');}void tihaosort(Data dat[],int n) //题号排序{int i,j;Data temp;for(i=0;i<n;++i)da[i]=dat[i];for(i=0;i<n-1;++i)for(j=i+1;j<n;++j)if(strcmp(da[i].tihao,da[j].tihao)>0){temp=da[i];da[i]=da[j];da[j]=temp;}printf("\t\t========排序成功========\n");}void SaveText(Data dat[],int n) //保存函数{int i;FILE *fp; /*指向文件的指针*/if((fp=fopen("txl.txt","wb"))==NULL) /*打开文件,并判断打开是否正常*/{printf("\t不能打开文件\n"); /*没打开*/exit(1); /*退出*/}fprintf(fp,"%d",n); /*将记录数写入文件*/fprintf(fp,"\r\n");for(i=0;i<n;i++){fprintf(fp,"%-8s%-6s",dat[i].tihao,dat[i].timu);fprintf(fp,"\r\n"); /*将换行符号写入文件*/}fclose(fp);}int LoadText(Data dat[]) //载入函数{int i,n;FILE *fp;if((fp=fopen("txl.txt","r"))==NULL){printf("不能打开文件\n");exit(1);}fscanf(fp,"%d",&n);/*读入记录数*/for(i=0;i<n;i++)fscanf(fp,"%s%s\n",dat[i].tihao,dat[i].timu); /*按格式读入记录*/fclose(fp);return n;/*返回记录数*/}int Charu(Data dat[],int n) //插入函数{Data temp;/*新插入记录信息*/int i=0,j,k;char s[20];do{printf("\t请插入您的数据\n");printf("\t题号:");scanf("\t%s",temp.tihao);for(k=0;k<n;k++) //判断插入数据是否存在{if(strcmp(dat[k].tihao,temp.tihao)==0){printf("\t-------该记录已存在,请重新输入!-------\n");system("pause");system("cls");break;}}}while(strcmp(dat[k].tihao,temp.tihao)==0);printf("\t题目:");scanf("\t%s",temp.timu);printf("\t请输入插入位置的题号:");scanf("\t%s",s); /*输入插入位置的题号*/while(strcmp(dat[i].tihao,s)!=0&&i<n) i++;if(i==n){printf("\t------------题库中没有记录,请查询后再操作!-------------\n");return n;}for(i=0;strcmp(dat[i].tihao,s)!=0;i++) ;printf("\n\t\t***********插入成功!************\n");for(j=n-1;j>=i;j--) /*从最后一个结点开始向后移动一条*/{strcpy(dat[j+1].tihao,dat[j].tihao); /*当前记录的题号拷贝到后一条*/strcpy(dat[j+1].timu,dat[j].timu);}strcpy(dat[i].tihao,temp.tihao); /*将新插入记录的题号拷贝到第i个位置*/strcpy(dat[i].timu,temp.timu);n++; /*记录数加1*/ return n;}int Shuru(Data dat[],int n) //输入函数{int i=0;char ch;while(ch!='n'&&ch!='N') //用来判断是否继续输入{system("cls");printf("\t题号:");scanf("\t%s",dat[n+i].tihao);printf("\t题目:");scanf("\t%s",dat[n+i].timu);printf("\n\t是否继续添加?(Y/N)");scanf("\t%c",&ch);i++;}return (n+i); //其实输入除了N 和n的任意键均能实现继续添加的功能}void List(Data dat[],int n) //显示函数{int i;printf("========================共%d条记录============================\n",n);printf("┌─────────────────────────────┐\n"); /*格式*/ printf("│题号│题目│\n");printf("└─────────────────────────────┘\n");for(i=0;i<n;i++){printf("%2s\t%3s\n",dat[i].tihao,dat[i].timu);/*按格式输出*/printf("───────────────────────────────\n");}system("pause");}int Shanchu(Data dat[],int n) //删除函数{char s[20]; /*要删除记录的题号*/int i=0,j;printf("\t请输入想删除记录中的题号:");scanf("%s",s);while(strcmp(dat[i].tihao,s)!=0&&i<n) i++; /*查找要删除的记录题号*/if(i==n){printf("\t题库中没有此题!\n");return(n);}for(j=i;j<n-1;j++) //数据交换{strcpy(dat[j].timu,dat[j+1].timu);strcpy(dat[j].tihao,dat[j+1].tihao);}printf("\t\t\t已经成功删除!\n");return(n-1);}void Chazhao(Data dat[],int n) //查询函数{int j;printf("\t\n请选择查询方式:\n");printf("\t┌──────┐\n");printf("\t│1------题号│\n");printf("\t│0------返回│\n");printf("\t└──────┘\n");printf("请选择:");scanf("%d",&j);if(j==1){char s[20];int i=0;printf("\t请输入想查询的题号:");scanf("\t%s",s);while(strcmp(dat[i].tihao,s)!=0&&i<n) i++;if(i==n){printf("\t题库中没有此题!\n");return;}printf("\t此题内容\n");printf("\t%5s\n",dat[i].timu);} ;}void Biangeng(Data dat[],int n) //修改函数{char s[20];int i=0;printf("\t请输入想修改的试题的题号:");scanf("%s",s);while(strcmp(dat[i].tihao,s)!=0&&i<n) i++;if(i==n){printf("\t题库中没有此题!\n");return;}printf("\t题号:");scanf("\t%s",dat[i].tihao);printf("\t题目:");scanf("\t%s",dat[i].timu);printf("\n\t修改成功!");}void CopyText() //复制文件函数{char out]; /*目标文件名*/int i,n;Data temp[80];FILE *fp,*fc;if((fp=fopen("txl.txt","rb"))==NULL) /*打开记录文件*/{printf("\t\t不能打开文件\n"); /*显示不能打开文件信息*/exit(1); /*退出*/ }printf("\t\t输入目标文件名(例如c:\\out):");scanf("%s",outfile);if((fc=fopen(outfile,"wb"))==NULL) /*打开目标文件*/{printf("\t\t不能打开文件\n"); /*显示不能打开文件信息*/exit(1); /*退出*/}fscanf(fp,"%d",&n); /*读出文件记录数*/fprintf(fc,"%d",n); /*写入目标文件数*/fprintf(fc,"\r\n"); /*写入换行符*/for(i=0;i<n;i++){fscanf(fp,"%s%s\n",temp[i].tihao,temp[i].timu);fprintf(fc,"%-8s%-6s",temp[i].tihao,temp[i].timu);fprintf(fc,"\r\n"); /*写入换行符*/ }fclose(fp); /*关闭源文件*/fclose(fc); /*关闭目标文件*/printf("\t\t您已成功复制文件!\n");}/* 主函数*/void main(){int n=0;for(;;){switch(menu_select()){case 1:system("cls");n=Shuru(da,n);break;case 2:system("cls");int k;printf("\t\t\t ======题库信息管理系统====== \n");printf("\t\t\t ┌──────────┐\n");printf("\t\t\t │1.显示全部题目│\n");printf("\t\t\t │2.按题号排序信息│\n");printf("\t\t\t │0.返回上一级菜单│\n");printf("\t\t\t └──────────┘\n");printf("\t\t\t ============================ \n");printf("\n\t\t请选择:");scanf("%d",&k);switch(k){case 1: //显示信息system("cls");List(da,n);break;case 2: //题号排序tihaosort(da,n);system("pause");break;case 0:;} break;case 3:system("cls");int m;printf("\t\t\t =====题库信息管理系统===== \n"); printf("\t\t\t ┌──────────┐\n");printf("\t\t\t │1.题库信息的修改│\n");printf("\t\t\t │2.题库信息的删除│\n");printf("\t\t\t │3.题库信息的插入│\n");printf("\t\t\t │0.返回│\n");printf("\t\t\t └──────────┘\n");printf("\t\t\t ========================== \n"); printf("\n\t\t请选择:");scanf("%d",&m);switch(m){case 1:system("cls");Biangeng(da,n);printf("\t");system("pause");break;case 2:system("cls");n=Shanchu(da,n); /*删除记录*/printf("\t");system("pause");break;case 3:system("cls");n=Charu(da,n); //插入函数printf("\t");system("pause");break;case 0:;} break;case 4:system("cls");printf("\n\t*****在题库中查找记录******\n"); Chazhao(da,n);printf("\t");system("pause");break;case 5:system("cls");int x;printf("\t\t\t =====题库信息管理系统===== \n"); printf("\t\t\t ┌──────────┐\n"); printf("\t\t\t │1.题库信息的载入│\n");printf("\t\t\t │2.题库信息的保存│\n");printf("\t\t\t │3.题库信息的复制│\n");printf("\t\t\t │0.返回│\n");printf("\t\t\t └──────────┘\n");printf("\t\t\t ========================== \n"); printf("\n\t\t请选择:");scanf("%d",&x);switch(x){case 1:n=LoadText(da);printf("\t\t您已经成功的将题目导入到题库!\n");printf("\t");system("pause");break;case 2:printf("\t\t=========题库的保存=========\n");SaveText(da,n);printf("\n\t\t保存成功\n");printf("\t");system("pause");break;case 3:CopyText(); /*保存数据*/printf("\t");system("pause");break;case 0:;}break;case 0:printf("\n\t\t\t感谢您的使用,再见!\n");exit(0);}}}5.程序运行结果(可截屏程序运行界面。

相关主题