请用C++编写此程序, 并编写测试程序进行测试?

请用C++编写此程序, 并编写测试程序进行测试?,第1张

你好!测试程序负责给编写好的程序提供样本数据,自动收集运行结果,并根据结果作出反馈。

测试程序可以单独写,也可以做为模块整合在源程序中。

像我们熟知的debug语句,就是测试的最简单例子。在没有“断电查看”这一功能之前,为了监测程序每步执行后变量的结果,往往加入一些输出关键变量的语句。

例如以下程序:

#incldue<iostream>

using namespace std

#define DEBUG

int main(){

int n

#ifdef DEBUG

cout<<n<<endl

#endif

n = 3

cout<<n<<endl

return 0

}

此处DEBUG的作用是查看未初始化的变量n的值。通常会显示-89******00(0xcccccccc).

一般这样的语句还会出现在对指针进行 *** 作之后,用debug语句输出指针所指向内存的内容等。

这只是测试程序的一个功能。正如前面提到的,测试程序应该提供数据以检测程序的健壮性和安全性,以及用海量数据对执行效率进行检验等。

测试数据的选择有以下几个要点,分别检测程序的不同特性:

@ 尽可能包括输入集合内所有可能出现的元素,观察程序能否给出正确结果。(Authenticity)

比如:有一个程序输入给定迷宫平面图,要测试出最短路径长度。那么输入的迷宫应该包括各种可能:有通路的和没有通路的,有死胡同的和没有的,有回路的(避免搜索时出现死循环),出口在左上角,右上角的等,都要考虑进去。程序应该对每种情况都做出正确的反应。

@ 注意测试极端情况以及临界情况。(Security)

这是为了检测程序的健壮性,用户不可避免地会做出不合法的举动,程序需要有足够的防护强度来应对这些意外。

比如:如果编写了一个简易的计算器,那么一定要检查除数为0的情况;一个程序的功能是将一片文档的内容链接到另一个文档内,那么一定要检查自己链接自己的情况;等等。

@ 注意输入数据的规模以及随机性。(Efficiency)

衡量程序效率的标准应该考虑大规模数据下的表现。数据需要有足够的随机性以避免意外情况。

比如:比较几种不同排序算法的效率时,选用的数据应该是随机顺序的。在顺序数据的情况下:冒泡算法显然比快排还快,但这是偶然情况。

@ 如果有可能,还可以检测程序的通用性及扩展性(Versatility &Compatibility)

好的程序应该易于扩展,可利用价值高。大多数软件都在不停的打补丁,而不是推倒重写。

测试程序一般无法直接检测这两种特性。然而,测试中出现的错误有时可以帮助我们提升程序的质量。

我曾经写过一个类似于美图秀秀的图像处理程序,C++写的,相当粗糙。输入还要用命令行控制。当时我用各种图片进行了测试,包括纯色的,有明显背景色调的,以及完全混乱的噪声点。前面的图片表现都很好,但处理最后一张图片时程序抛出了异常——经过检验发现,我的处理程序是基于24位图片写的,而最后一张图片是32位的。类似的情况还有32位系统和64位系统下程序运行的问题等,在此就不赘述了。

要编写测试程序,一般分为两个模块:数据生成和结果检测。

测试程序的第一部分将生成的数据写入一个文件,让程序读取文件并运行后,再将结果写入另一个文件,之后由测试程序的第二部分比对输出文件和标准答案。

对于检测健壮性的测试程序,只需有第一部分即可,待检测程序在处理数据时如果发生异常,就根据结果作相应的修改。

测试效率的程序,可以在待检程序内加入计时模块。具体写法如下:

#include<ctime>

#define CHECK_TIME

int main(){

//....intput

#ifdef CHECK_TIME

clock t start = clock()

#endif

#ifdef CHECK_TIME

cout <<"Execution Time: " <<clock() - start <<" ms." <<endl

#endif

嗯,就是这么多啦,希望对你有帮助!

这是一款图书管理系统 但是我没有写排序 没有写归还 因为归还和借出都差不多 里面有图书删除 *** 作 学生查找 图书查找 学生输出 图书输出 图书借出 插入图书 插入学生 最多借三本书 没有对把数据格式化写入文件 而是块读入 读出 插入学生和图书 约定学生 图书看、号不为0 输入图书label 和 stu_num 为0时就结束插入 插入全部插在文件末尾 程序很简单 也是随便写的 不过我觉得接近我们这种初学者 以下附上代码

#ifndef B_MANAGEMENT_H

#define B_MANAGEMENT_H

#include<stdio.h>

#define MAX_BO 3

#define LENTH_SB sizeof(sb_book)

#define LENTH_ST sizeof(st_book)

#define sb_book struct b

#define st_book struct s

//声明学生的数据结构

struct s

{

char name[20]

int num_student

char book[MAX_BO][30]

int num_book

}

//声明图书的数据结构

struct b

{

long book_label

char book_name[30]

int book_num

int book_remain

sb_book* next

}

//声明图书的 *** 作

sb_book* search_book(const char*,FILE*,sb_book*)//用线性存储结构存储文件数据

void delete_book()

void insert_book(sb_book*)

//声明学生的 *** 作

st_book* search_student(int,FILE *p,st_book*)

void insert_student(st_book*)

void borrow_book(int,const char*,sb_book*,st_book*,FILE*,FILE*)

#endif

void main()

{

delete_book()

}

#include<stdio.h>

#include<stdlib.h>

#include"bk_management.h"

void insert_book(sb_book* pb_book)

{

FILE* fp=NULL

fp=fopen("D:\\book.txt","a+")

if(fp==NULL)

{

printf("can not open file")

exit(0)

}

if(fwrite(pb_book,LENTH_SB,1,fp)==0)

{

printf("failed to write string to book.txt")

exit(0)

}

fclose(fp)

}

#include"bk_management.h"

#include<malloc.h>

#include<stdlib.h>

#include<stdio.h>

void delete_book()

{

long delete_label

FILE* fp=NULL

sb_book *p1,*p2,*head=NULL

printf("please input book_label:")

scanf("%ld",&delete_label)

fp=fopen("D:\\book.txt","r")

if(fp==NULL)

{

printf("can not open file")

exit(0)

}

head=p1=p2=(sb_book*)malloc(LENTH_SB)

fread(p1,LENTH_SB,1,fp)

if(feof(fp)) exit(0)

//将文件中的数据读入内存形成链表,head为链表首指针

while(!feof(fp))

{

p2=p1

p1=(sb_book*)malloc(LENTH_SB)

fread(p1,LENTH_SB,1,fp)

p2->next=p1

}

p1->next=NULL

fclose(fp)

//删除指定的书籍的数据块

p1=p2=head

while(p1->book_label!=delete_label&&p1->next!=NULL)

{

p2=p1

p1=p1->next

}

if(p1->book_label==delete_label)

{

if(p1==head)

head=p1->next

else

p2->next=p1->next

}

else

{

printf("no book you want to delete")

}

//将数据块写会文件

fp=fopen("D:\\book.txt","w")

if(fp==NULL)

{

printf("can not open file")

exit(0)

}

while(head->next!=NULL)

{

fwrite(head,LENTH_SB,1,fp)

head=head->next

}

fclose(fp)

}

#include<stdio.h>

#include"bk_management.h"

void borrow_book(int num_student,const char* book_name,sb_book book[1000],st_book stu[1000],FILE* fp_sb,FILE* fp_st)

{

extern sum_book

extern sum_student

sb_book* book_sb

st_book* stu_st

stu_st=search_student(num_student,fp_st,stu)

if(stu_st->num_book<MAX_BO)

{

book_sb=search_book(book_name,fp_sb,book)

(book_sb->book_remain)--

strcpy(stu_st->book[stu_st->num_book],book_name)

(stu_st->num_book)++

fseek(fp_sb,sum_book*LENTH_SB,0)

fwrite(book_sb,LENTH_SB,1,fp_sb)

fseek(fp_st,sum_student*LENTH_ST,0)

fwrite(stu_st,LENTH_ST,1,fp_st)

}

else printf("you can not borrow book!!!")

}

#include<stdio.h>

#include<stdlib.h>

#include"bk_management.h"

void main()

{

FILE *fp_sb=NULL,*fp_st=NULL

int stu_num

char _book[30]

sb_book book[1000]

st_book stu[1000]

fp_sb=fopen("D:\\book.txt","r+")

fp_st=fopen("D:\\stu.txt","r+")

if(fp_sb==NULL || fp_st==NULL)

{

printf("fail to open file")

exit(0)

}

printf("Please input student number:")

scanf("%d",&stu_num)

getchar()

printf("please input book:")

gets(_book)

borrow_book(stu_num,_book,book,stu,fp_sb,fp_st)

getch()

fclose(fp_sb)

fclose(fp_st)

}

#include<stdio.h>

#include<stdlib.h>

#include"bk_management.h"

void insert_student(st_book* pt_book)

{

FILE* fp=NULL

fp=fopen("D:\\stu.txt","a+")

if(fp==NULL)

{

printf("can not open file")

exit(0)

}

if(fwrite(pt_book,LENTH_ST,1,fp)==0)

{

printf("failed to write string to book.txt")

exit(0)

}

fclose(fp)

}

#include<stdio.h>

#include<stdlib.h>

#include"bk_management.h"

void main()

{

st_book stu[1000]

int i,j

FILE* fp=NULL

fp=fopen("D:\\stu.txt","r")

if(fp==NULL)

{

printf("can not open file")

exit(0)

}

for(i=0i<1000i++)

{

fread(&stu[i],LENTH_ST,1,fp)

if(feof(fp)) break

printf("%8d %-20s %8d\n",stu[i].num_student,stu[i].name,stu[i].num_book)

for(j=0j<stu[i].num_bookj++)

printf("%-30s, ",stu[i].book[j])

printf("\n")

}

getch()

fclose(fp)

}

#include<stdio.h>

#include"bk_management.h"

#include<stdlib.h>

int sum_student

st_book* search_student(int num_stu,FILE* fp,st_book stu[1000])

{

int i

for(i=0(!feof(fp))&&i<1000i++)

{

fread(&stu[i],LENTH_ST,1,fp)

sum_student++

}

for(i=0num_stu!=stu[i].num_student&&i<sum_studenti++)

sum_student=i

if(num_stu==stu[i].num_student)

return &stu[i]

else

printf("no student you search")

return NULL

}

#include<stdio.h>

#include"bk_management.h"

#include<stdlib.h>

void main()

{

FILE* fp=NULL

st_book _stu[1000]

int num_stu

st_book* stu

int j

fp=fopen("D:\\stu.txt","r")

if(fp==NULL)

{

printf("can not open file")

exit(0)

}

printf("please input student number:")

scanf("%d",&num_stu)

stu=search_student(num_stu,fp,_stu)

if(stu!=NULL)

{

printf("%8d %-20s %8d\n",stu->num_student,stu->name,stu->num_book)

for(j=0j<stu->num_bookj++)

printf("%-30s, ",stu->book[j])

printf("\n")

}

fclose(fp)

getch()

}

#include<stdio.h>

#include<stdlib.h>

#include"bk_management.h"

void main()

{

sb_book* p

FILE* fp=NULL

fp=fopen("D:\\book.txt","r")

if(fp==NULL)

{

printf("can not open file")

exit(0)

}

while(1)

{

p=(sb_book*)malloc(LENTH_SB)

fread(p,LENTH_SB,1,fp)

if(feof(fp)) break

printf("%8d %-30s %-3d %-3d\n",p->book_label,p->book_name,p->book_num,p->book_remain)

}

fclose(fp)

getch()

}

#include "bk_management.h"

#include<malloc.h>

void main()

{

sb_book *pb

while(1)

{

pb=(sb_book*)malloc(LENTH_SB)

printf("please input book_label:")

scanf("%ld",&pb->book_label)

getchar()

printf("please input book_name:")

gets(pb->book_name)

printf("please input book_num:")

scanf("%d",&pb->book_num)

pb->book_remain=pb->book_num

if(pb->book_label==0) break

insert_book(pb)

}

}

#include "bk_management.h"

#include<malloc.h>

void main()

{

st_book* pt

while(1)

{

pt=(st_book*)malloc(LENTH_ST)

printf("please input num_student:")

scanf("%d",&pt->num_student)

getchar()

printf("please input name:")

gets(pt->name)

strcpy(pt->book[0],"0")

strcpy(pt->book[1],"0")

strcpy(pt->book[2],"0")

pt->num_book=0

if(pt->num_student==0) break

insert_student(pt)

}

}

#include<stdio.h>

#include"bk_management.h"

#include<stdlib.h>

int sum_book

sb_book* search_book(const char* ptr,FILE* fp,sb_book book[1000])

{

int i

for(i=0(!feof(fp))&&i<1000i++)

{

fread(&book[i],LENTH_SB,1,fp)

sum_book++

}

for(i=0strcmp(&book[i].book_name,ptr)&&i<sum_booki++)

sum_book=i

if(!strcmp(&book[i].book_name,ptr))

return &book[i]

else

printf("no book you search")

return NULL

}

#include<stdio.h>

#include<stdlib.h>

#include"bk_management.h"

void main()

{

FILE* fp=NULL

char book_name[30]

sb_book* book

sb_book _book[1000]

fp=fopen("D:\\book.txt","r")

if(fp==NULL)

{

printf("can not open file")

exit(0)

}

printf("please input book_name:")

gets(book_name)

book=search_book(book_name,fp,_book)

if(book!=NULL)

printf("%8d %-30s %-3d %-3d\n",book->book_label,book->book_name,book->book_num,book->book_remain)

fclose(fp)

getch()

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11957088.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存