逆向软件设计-会员管理系统

(1)来源:csdn一位博主的会员管理系统 https://blog.csdn.net/weixin_55245206/article/details/121226040?ops_request_misc=%257B%2522request%255Fid%2522%253A%25227a6b814b19e91d3c30f084dd38599ba1%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=7a6b814b19e91d3c30f084dd38599ba1&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-1-121226040-null-null.142v101pc_search_result_base7&utm_term=c%E8%AF%AD%E8%A8%80%E4%BC%9A%E5%91%98%E7%AE%A1%E7%90%86%E7%B3%BB%E7%BB%9F&spm=1018.2226.3001.4187
(2)运行环境和运行结果的截图(伸缩代码附上)
运行环境:dev


点击查看代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct VIP             //定义结构体,存储会员账号、姓名、身份证号、联系方式、状态、余额 
{
	long no;
	char name[20];    //姓名、身份证号含有字符,使用char定义 
	char IDcard[19];
	char phone[12];   //联系电话有11位,超出了int的范围,使用字符串定义 
	int zhuangtai;	  //如果状态为1,则正常,若为0,则状态为挂失 
	int yue;
};
struct VIP s[50];     //定义结构体数组 
int n=0;              //n表示存入的会员数量 
 
void init();          //含义见main主函数 
void print();           
struct VIP gete();
void add1();             
void findbyno();       
void findbyname();
void findbyIDcard();
void findbyphone();     
void mod();            
void del();             
void sort();  
void transaction();
 
         
void init()   //初始化(唯一的6位会员账号)
{
	int f=1; //1唯一   0不唯一 
	printf("请输入会员的账号,姓名,身份证号码,联系电话,余额,状态\n");
	printf("当输入会员号为0时停止输入\n");
	while(n<=50)
	{
		printf("请输入会员的账号:\n");
		scanf("%ld",&s[n].no);
		while(s[n].no!=0)
		{
			if(s[n].no/1000000==0 && s[n].no/100000!=0)
			{
				int i;
				for(i=0;i<n&&f==1;i++)
				{
					if(s[n].no==s[i].no)
					{
						f=0;
						printf("请输入唯一的6位会员账号\n"); 
					}
			
				}   
				if(f==1) 
					break;
			}
			else
			{
				printf("请输入6位会员账号\n");	
				printf("请重新输入会员的账号:\n");
				scanf("%d",&s[n].no);
			}
		}
		if(s[n].no==0)   
			break; 		//如果输入的账号为0,结束输入
		printf("请输入会员的姓名:\n");
		scanf("%s",s[n].name);
		printf("请输入会员的身份证号,联系电话,余额,状态:\n");
		scanf("%s%s%d%d",s[n].IDcard,s[n].phone,&s[n].yue,&s[n].zhuangtai);
		n++;
	}
}
 
void print()  //输出 
{
	//|和=组合起来,使输出结果时有表格样式
	//%t、空格使输出时数据对其 
	int j;
	printf("会员信息记录如下:\n");
	printf("     |===================================================================================|\n");
	printf("     |账号\t姓名\t        身份证号      \t  联系电话   \t余额\t  状态           |\n");
	printf("     |-----------------------------------------------------------------------------------|\n");
	for(j=0;j<n;j++)		
	{
	    printf("     |%ld\t%s\t  %s\t%s\t%d\t",s[j].no,s[j].name,s[j].IDcard,s[j].phone,s[j].yue);
	    if(s[j].zhuangtai==1)
	         printf("  正常           |\n");
	    else
	         printf("  挂失           |\n"); 
	    if(j<(n-1))
		printf("     |-----------------------------------------------------------------------------------|\n");
	}
	printf("     |===================================================================================|\n");
}
 
struct VIP gete()       //输入 
{
	struct VIP e;
	printf("请输入账号:\n");
	scanf("%d",&e.no);
	int f=1;
	while(e.no)
	{	
		if(e.no/1000000==0 && e.no/100000!=0)
		{
			int i;
			for(i=0;i<n&&f==1;i++)
			{
				if(e.no==s[i].no)
				{
					f=0;
					printf("请输入唯一的6位会员账号\n"); 
					scanf("%d",&e.no);
				}		
			}   
			if(f==1)   
				break;
		}
		else
		{
			printf("请输入6位会员账号\n");	
			printf("请重新输入会员的账号:\n");
			scanf("%d",&e.no);
		}
	}
	printf("请输入姓名:\n");
	scanf("%s",&e.name);
	printf("请输入会员的身份证号,联系电话,余额,状态:\n");
	scanf("%s%s%d%d",&e.IDcard,&e.phone,&e.yue,&e.zhuangtai);
	return e;
 
}
 
void add1()   //添加新的会员信息 
{
	struct VIP e = gete();
	int i; 
   	printf("请输入要插入的位置(1-%d):\n",n);
	scanf("%d",&i); 
	while(i<1||i>n+1) 
	{
		printf("您输入的位置有误!\n");
		printf("请重新输入要插入的位置(1-%d):\n",n);
		scanf("%d",&i);
	}
	for(int j=n-1;j>=i-1;j--) 
	{
		s[j+1]=s[j];
	}
	s[i-1]=e;
	n++; 
}
 
void findbyno()     //根据会员账号查找会员信息 
{
	int num,i;
	int found=1;
	char choice;
    while(1)
	{
        printf("请输入要查找的会员的账号:\n");
        scanf("%d",&num);
        getchar();
        for(i=0;i<n&&found==1;i++)
        {
        	
        	if(s[i].no==num)
			{
					found=0;
					printf("%ld\t%s\t%d\t%d\t%d\t",s[i].no,s[i].name,s[i].IDcard,s[i].phone,s[i].yue);
					if(s[i].zhuangtai==1)
	                   printf("正常\n");
	                else
	                   printf("挂失!\n"); 
			}
		}
        if(found==1)
		{
			printf("未找到!\n");
		}
		found=1;	
		printf("是否继续查询(Y/N)\n");
		choice=getchar();
		if(choice=='N'|| choice=='n')
			break;
	}
}
 
void findbyname()    //根据会员姓名查找会员信息 
{
		char name[20];
		char choice;
		int found=1;
		int i;
		while(1)
		{
		printf("输入要查询会员的姓名:\n");
		scanf("%s",name);
		getchar();
		for(i=0;i<n&&found==1;i++)
		{
			if(strcmp(s[i].name,name)==0)
			{
				found=0;
				printf("%ld\t%s\t%d\t%d\t%d\t",s[i].no,s[i].name,s[i].IDcard,s[i].phone,s[i].yue);
				if(s[i].zhuangtai==1)
	                printf("正常\n");
	            else
	                printf("挂失!\n"); 
			}
		}
		if(found==1)
		{
			printf("未找到!\n");
		}
		found=1;	
		printf("是否继续查询(Y/N)\n");
		choice=getchar();
		if(choice=='N'|| choice=='n')
			break;
	}
}
 
void findbyIDcard()   //根据身份证号查找会员信息 
{
    char num[19];
    int i;
	int found=1;
	char choice;
    while(1)
	{
        printf("请输入要查找的会员的身份证号:\n");
        scanf("%s",num);
        getchar();
        for(i=0;i<n&&found==1;i++)
        {
            if(strcmp(s[i].IDcard,num)==0)
			{
					found=0;
					printf("%ld\t%s\t%d\t%d\t%d\t",s[i].no,s[i].name,s[i].IDcard,s[i].phone,s[i].yue);
					if(s[i].zhuangtai==1)
	                   printf("正常\n");
	                else
	                   printf("挂失!\n"); 
			}
		}
        if(found==1)
		{
			printf("未找到!\n");
		}
		found=1;	
		printf("是否继续查询(Y/N)\n");
		choice=getchar();
		if(choice=='N'|| choice=='n')
			break;
	}		
}
 
void findbyphone()    //根据联系电话查找会员信息 
{
    char num[12];
    int i;
	int found=1;
	char choice;
    while(1)
	{
        printf("请输入要查找的会员的联系电话:\n");
        scanf("%s",num);
        getchar();
        for(i=0;i<n&&found==1;i++)
        {
            if(strcmp(s[i].phone,num)==0)
			{
				found=0;
				printf("%ld\t%s\t%d\t%d\t%d\t",s[i].no,s[i].name,s[i].IDcard,s[i].phone,s[i].yue);
				if(s[i].zhuangtai==1)
	                printf("正常\n");
	            else
	                printf("挂失!\n"); 
			}
		}
        if(found==1)
		{
			printf("未找到!\n");
		}
		found=1;	
		printf("是否继续查询(Y/N)\n");
		choice=getchar();
		if(choice=='N'|| choice=='n')
			break;
	}		
}
 
void mod()     //修改已有的会员信息 
{
    int num,i;
	int found=1;
	char choice;
	int opt;
	while(1)
	{
		printf("请输入要修改的会员的账号(会员号无法修改):\n");
		scanf("%d",&num);
		getchar();
		for (i=0;i<n&&found==1;i++)
		{
			if(s[i].no==num)
			{
				found=0;
				printf("%ld\t%s\t%d\t%d\t%d\t",s[i].no,s[i].name,s[i].IDcard,s[i].phone,s[i].yue);
				if(s[i].zhuangtai==1)
	                 printf("正常\n");
	            else
	                 printf("挂失\n"); 
				printf("--请选择--1.修改身份证号 2.修改联系电话 3.修改状态\n");
				scanf("%d",&opt);
				getchar();
				switch(opt)
				{
				case 1:
					printf("请输入身份证号新值:\n");  
					scanf("%s",s[i].IDcard);   
					getchar(); 
					break;
				case 2:
					printf("请输入联系电话新值:\n");  
					scanf("%s",s[i].phone);     
					getchar(); 
					break;
				case 3:
					printf("请输入状态新值:\n");  
					scanf("%d",&s[i].zhuangtai);   
					getchar(); 
					break;				
				}
			}
		}
		if(found==1)
		{
			printf("未找到!\n");
		}	
		found=1;
		printf("是否继续修改(Y or N)\n");
		choice=getchar();
		getchar();
		if(choice=='N'|| choice=='n')
			 break;
		}
}
 
void del()     //删除已有会员信息 
{
    int num,i,j;
	int found=1;
	char choice;
    while(1)
	{
        printf("请输入要删除的会员的账号:\n");
        scanf("%d",&num);
        getchar();
        for(i=0;i<n&&found==1;i++)   //5  1-5      
        {
			if(s[i].no==num)
			{
				found=0;
				printf("你要删除的会员信息为:\n");
				printf("会员账号     姓名      身份证号      联系电话       余额        状态\n"); 
				printf("%ld\t%s\t%d\t%d\t%d\t",s[i].no,s[i].name,s[i].IDcard,s[i].phone,s[i].yue);
				if(s[i].zhuangtai==1)
	                 printf("正常\n");
	            else
	                 printf("挂失!\n"); 
				for(j=i;j<n-1;j++)
				{
					s[j]=s[j+1];
				}
				n--;				
			}
		}
		if(found==1)
		{
			printf("未找到!\n");
		}	
		found=1;
		printf("是否继续(Y/N)\n");
		choice=getchar();
		getchar();
		if(choice=='N'|| choice=='n')
			break;
	}
}
void transaction()     //消费或充值 
{
	int num,i,a,b;
	int found=1;
	char choice;
    while(1)
	{
        printf("请输入会员的账号:\n");
        scanf("%d",&num);
        getchar();
        for(i=0;i<n&&found==1;i++)
            if(s[i].no==num)
			{
				found=0;
				printf("%ld\t%s\t%d\t%d\t%d\t",s[i].no,s[i].name,s[i].IDcard,s[i].phone,s[i].yue);
				if(s[i].zhuangtai==1)
	            	printf("正常\n");
	            else
	                printf("挂失!\n"); 
	            printf("请选择类型:1.消费  2.充值\n");
	            scanf("%d",&a);
	        	getchar();
	            printf("请输入金额:\n");
	            scanf("%d",&b); 
	            getchar();
	            if(a==1)
	            {
	            	s[i].yue=s[i].yue-b;
					printf("%ld\t%s\t%s\t%s\t%d\t",s[i].no,s[i].name,s[i].IDcard,s[i].phone,s[i].yue);
	                if(s[i].zhuangtai==1)
	                   printf("正常\n");
	                else
	                   printf("挂失!\n");
				}
				else
				{
					s[i].yue=s[i].yue+b;
					printf("%ld\t%s\t%s\t%s\t%d\t",s[i].no,s[i].name,s[i].IDcard,s[i].phone,s[i].yue); 
					if(s[i].zhuangtai==1)
	                   printf("正常\n");
	                else
	                   printf("挂失!\n");
				}       
			}
        if(found==1)
		{
			printf("未找到!\n");
		}
		found=1;	
		printf("是否继续(Y/N)\n");
		choice=getchar();
		getchar(); 
		if(choice=='N'|| choice=='n')
			break;
	}
}
 
void sort()     //根据会员账号从小到大排序 
{
	int i,j;
	struct VIP temp;
	for(i=0;i<n;i++) 
	{
		for (j=i+1;j<n;j++) 
		{
			if (s[i].no>s[j].no) 
			{ 
				temp=s[i]; 
				s[i]=s[j]; 
				s[j]=temp; 
			}
		}
	}
	printf("\n排序后的会员信息:\n");
}
	
int main()
{
	int opt;
	printf("     |*============================================*|\n");
	printf("     |*             欢迎使用会员管理系统           *|\n");
	printf("     |*============================================*|\n");
	printf("     |*    1.初始化                                *|\n");
	printf("     |*    2.添加新的会员记录                      *|\n");
	printf("     |*    3.修改已有会员记录/挂失                 *|\n");
	printf("     |*    4.根据账号查询已有会员记录              *|\n");
	printf("     |*    5.根据姓名查询已有会员记录              *|\n");         
	printf("     |*    6.根据身份证号查询已有会员记录          *|\n");
	printf("     |*    7.根据联系电话查询已有会员记录          *|\n");
	printf("     |*    8.删除已有会员记录                      *|\n");
	printf("     |*    9.根据会员账号排序并显示                *|\n");
	printf("     |*    10.会员消费或充值                       *|\n"); 
	printf("     |*    0.退出会员信息管理系统                  *|\n");
	printf("     |*============================================*|\n");
	while(1)
	{
		printf("请输入要完成的功能:0-10:");
		scanf("%d",&opt);
		getchar();    //吸收回车 
		switch(opt)
		{
			case 1:init();print();break;          //初始化 
			case 2:add1();print();break;          //添加 
			case 3:mod();print();break;           //修改 
			case 4:findbyno();print();break;      //根据账号查询 
			case 5:findbyname();print();break;    //根据姓名查询 
			case 6:findbyIDcard();print();break;  //根据身份证号查询 
			case 7:findbyphone();print();break;   //根据联系电话查询 
			case 8:del();print();break;           //删除 
			case 9:sort();print();break;          //排序 
			case 10:transaction();print();break;  //消费/充值 
			case 0:system("cls");exit(0);break;   //退出 
			default:printf("请输入0-10中的数!\n");break;
		}
	}
}
(3)主要问题列表: 输入格式问题 3.1问题:在 scanf 函数使用时,部分代码存在输入格式不匹配的问题。例如,在读取 long 类型的会员账号时,有时使用 %d 而不是 %ld。 改善:统一使用正确的输入格式,确保 long 类型使用 %ld 读取。 3.2 数据验证问题 问题:在输入会员信息时,仅对会员账号进行了唯一性和长度验证,对身份证号、联系电话等没有进行有效的格式验证。 改善:添加对身份证号和联系电话的格式验证,确保输入的数据符合要求。 3.3 代码重复问题 问题:多个查询函数(findbyno、findbyname、findbyIDcard、findbyphone)的结构非常相似,存在大量重复代码。 改善:将查询逻辑封装成一个通用的函数,减少代码重复。 3.4 余额处理问题 问题:在消费操作时,没有检查余额是否足够,可能导致余额为负数。 改善:在消费操作前,检查余额是否足够,若不足则给出提示。 (4)新代码附上
点击查看代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

struct VIP {
    long no;
    char name[20];
    char IDcard[19];
    char phone[12];
    int zhuangtai;
    int yue;
};

struct VIP s[50];
int n = 0;

// 验证身份证号格式
int validateIDcard(const char *id) {
    if (strlen(id) != 18) return 0;
    for (int i = 0; i < 17; i++) {
        if (!isdigit(id[i])) return 0;
    }
    if (!isdigit(id[17]) && id[17] != 'X' && id[17] != 'x') return 0;
    return 1;
}

// 验证联系电话格式
int validatePhone(const char *phone) {
    if (strlen(phone) != 11) return 0;
    for (int i = 0; i < 11; i++) {
        if (!isdigit(phone[i])) return 0;
    }
    return 1;
}

// 通用查询函数
void findGeneral(int (*compare)(struct VIP, void *), void *key) {
    int found = 0;
    char choice;
    while (1) {
        for (int i = 0; i < n; i++) {
            if (compare(s[i], key)) {
                found = 1;
                printf("%ld\t%s\t%s\t%s\t%d\t", s[i].no, s[i].name, s[i].IDcard, s[i].phone, s[i].yue);
                if (s[i].zhuangtai == 1)
                    printf("正常\n");
                else
                    printf("挂失!\n");
            }
        }
        if (!found) {
            printf("未找到!\n");
        }
        found = 0;
        printf("是否继续查询(Y/N)\n");
        choice = getchar();
        getchar();
        if (choice == 'N' || choice == 'n')
            break;
    }
}

// 根据账号比较
int compareByNo(struct VIP vip, void *key) {
    long *no = (long *)key;
    return vip.no == *no;
}

// 根据姓名比较
int compareByName(struct VIP vip, void *key) {
    char *name = (char *)key;
    return strcmp(vip.name, name) == 0;
}

// 根据身份证号比较
int compareByIDcard(struct VIP vip, void *key) {
    char *id = (char *)key;
    return strcmp(vip.IDcard, id) == 0;
}

// 根据联系电话比较
int compareByPhone(struct VIP vip, void *key) {
    char *phone = (char *)key;
    return strcmp(vip.phone, phone) == 0;
}

void init() {
    int f = 1;
    printf("请输入会员的账号,姓名,身份证号码,联系电话,余额,状态\n");
    printf("当输入会员号为0时停止输入\n");
    while (n <= 50) {
        printf("请输入会员的账号:\n");
        scanf("%ld", &s[n].no);
        while (s[n].no != 0) {
            if (s[n].no / 1000000 == 0 && s[n].no / 100000 != 0) {
                int i;
                for (i = 0; i < n && f == 1; i++) {
                    if (s[n].no == s[i].no) {
                        f = 0;
                        printf("请输入唯一的6位会员账号\n");
                    }
                }
                if (f == 1)
                    break;
            } else {
                printf("请输入6位会员账号\n");
                printf("请重新输入会员的账号:\n");
                scanf("%ld", &s[n].no);
            }
            f = 1;
        }
        if (s[n].no == 0)
            break;
        printf("请输入会员的姓名:\n");
        scanf("%s", s[n].name);
        while (1) {
            printf("请输入会员的身份证号,联系电话,余额,状态:\n");
            scanf("%s%s%d%d", s[n].IDcard, s[n].phone, &s[n].yue, &s[n].zhuangtai);
            if (validateIDcard(s[n].IDcard) && validatePhone(s[n].phone)) {
                break;
            } else {
                printf("身份证号或联系电话格式错误,请重新输入!\n");
            }
        }
        n++;
    }
}

struct VIP gete() {
    struct VIP e;
    printf("请输入账号:\n");
    scanf("%ld", &e.no);
    int f = 1;
    while (e.no) {
        if (e.no / 1000000 == 0 && e.no / 100000 != 0) {
            int i;
            for (i = 0; i < n && f == 1; i++) {
                if (e.no == s[i].no) {
                    f = 0;
                    printf("请输入唯一的6位会员账号\n");
                    scanf("%ld", &e.no);
                }
            }
            if (f == 1)
                break;
        } else {
            printf("请输入6位会员账号\n");
            printf("请重新输入会员的账号:\n");
            scanf("%ld", &e.no);
        }
        f = 1;
    }
    printf("请输入姓名:\n");
    scanf("%s", e.name);
    while (1) {
        printf("请输入会员的身份证号,联系电话,余额,状态:\n");
        scanf("%s%s%d%d", e.IDcard, e.phone, &e.yue, &e.zhuangtai);
        if (validateIDcard(e.IDcard) && validatePhone(e.phone)) {
            break;
        } else {
            printf("身份证号或联系电话格式错误,请重新输入!\n");
        }
    }
    return e;
}

void findbyno() {
    long num;
    printf("请输入要查找的会员的账号:\n");
    scanf("%ld", &num);
    getchar();
    findGeneral(compareByNo, &num);
}

void findbyname() {
    char name[20];
    printf("输入要查询会员的姓名:\n");
    scanf("%s", name);
    getchar();
    findGeneral(compareByName, name);
}

void findbyIDcard() {
    char num[19];
    printf("请输入要查找的会员的身份证号:\n");
    scanf("%s", num);
    getchar();
    findGeneral(compareByIDcard, num);
}

void findbyphone() {
    char num[12];
    printf("请输入要查找的会员的联系电话:\n");
    scanf("%s", num);
    getchar();
    findGeneral(compareByPhone, num);
}

void transaction() {
    long num;
    int i, a, b;
    int found = 1;
    char choice;
    while (1) {
        printf("请输入会员的账号:\n");
        scanf("%ld", &num);
        getchar();
        for (i = 0; i < n && found == 1; i++)
            if (s[i].no == num) {
                found = 0;
                printf("%ld\t%s\t%s\t%s\t%d\t", s[i].no, s[i].name, s[i].IDcard, s[i].phone, s[i].yue);
                if (s[i].zhuangtai == 1)
                    printf("正常\n");
                else
                    printf("挂失!\n");
                printf("请选择类型:1.消费  2.充值\n");
                scanf("%d", &a);
                getchar();
                printf("请输入金额:\n");
                scanf("%d", &b);
                getchar();
                if (a == 1) {
                    if (s[i].yue >= b) {
                        s[i].yue = s[i].yue - b;
                        printf("%ld\t%s\t%s\t%s\t%d\t", s[i].no, s[i].name, s[i].IDcard, s[i].phone, s[i].yue);
                        if (s[i].zhuangtai == 1)
                            printf("正常\n");
                        else
                            printf("挂失!\n");
                    } else {
                        printf("余额不足,无法消费!\n");
                    }
                } else {
                    s[i].yue = s[i].yue + b;
                    printf("%ld\t%s\t%s\t%s\t%d\t", s[i].no, s[i].name, s[i].IDcard, s[i].phone, s[i].yue);
                    if (s[i].zhuangtai == 1)
                        printf("正常\n");
                    else
                        printf("挂失!\n");
                }
            }
        if (found == 1) {
            printf("未找到!\n");
        }
        found = 1;
        printf("是否继续(Y/N)\n");
        choice = getchar();
        getchar();
        if (choice == 'N' || choice == 'n')
            break;
    }
}

// 未修改部分省略,可结合原代码使用

int main() {
    int opt;
    printf("     |*============================================*|\n");
    printf("     |*             欢迎使用会员管理系统           *|\n");
    printf("     |*============================================*|\n");
    printf("     |*    1.初始化                                *|\n");
    printf("     |*    2.添加新的会员记录                      *|\n");
    printf("     |*    3.修改已有会员记录/挂失                 *|\n");
    printf("     |*    4.根据账号查询已有会员记录              *|\n");
    printf("     |*    5.根据姓名查询已有会员记录              *|\n");
    printf("     |*    6.根据身份证号查询已有会员记录          *|\n");
    printf("     |*    7.根据联系电话查询已有会员记录          *|\n");
    printf("     |*    8.删除已有会员记录                      *|\n");
    printf("     |*    9.根据会员账号排序并显示                *|\n");
    printf("     |*    10.会员消费或充值                       *|\n");
    printf("     |*    0.退出会员信息管理系统                  *|\n");
    printf("     |*============================================*|\n");
    while (1) {
        printf("请输入要完成的功能:0-10:");
        scanf("%d", &opt);
        getchar();
        switch (opt) {
            case 1:init();print();break;
            case 2:add1();print();break;
            case 3:mod();print();break;
            case 4:findbyno();print();break;
            case 5:findbyname();print();break;
            case 6:findbyIDcard();print();break;
            case 7:findbyphone();print();break;
            case 8:del();print();break;
            case 9:sort();print();break;
            case 10:transaction();print();break;
            case 0:system("cls");exit(0);break;
            default:printf("请输入0-10中的数!\n");break;
        }
    }
}
(5)重构的软件的测试截图 ![image](https://img2024.cnblogs.com/blog/3607100/202502/3607100-20250228021054009-373040136.png) ![image](https://img2024.cnblogs.com/blog/3607100/202502/3607100-20250228021231929-384795899.png) ![image](https://img2024.cnblogs.com/blog/3607100/202502/3607100-20250228021253624-2082821108.png)

初始化测试:输入会员信息时,若输入的会员账号不是 6 位或不唯一,会给出相应提示;输入身份证号或联系电话格式错误时,也会提示重新输入。
消费测试:当会员余额不足时,进行消费操作会提示 “余额不足,无法消费!”。
查询测试:使用不同的查询方式(账号、姓名、身份证号、联系电话)能正常查询会员信息,若未找到会提示 “未找到!”
(6)总结:
代码重构:将多个相似的查询函数封装成一个通用函数时,需要考虑如何设计合适的比较函数和传递参数,以保证代码的通用性和可扩展性。
数据验证:设计身份证号和联系电话的格式验证逻辑时,需要考虑多种情况,确保验证的准确性。
耗时较久的部分:
通用查询函数的设计:需要对原有的查询逻辑进行抽象和封装,经过多次尝试和调试才得到满意的结果。
数据验证逻辑的实现:身份证号和联系电话的格式验证需要考虑多种边界情况,花费了较多时间进行测试和优化。
逆向软件工程的思考
逆向软件工程是从现有软件系统中提取信息,理解其结构和功能,以便进行维护、改进或重构的过程。在本次代码分析和二次开发中,通过仔细阅读代码,找出了原代码存在的问题,并进行了相应的改进。逆向软件工程可以帮助我们更好地理解软件的实现细节,发现潜在的问题,从而提高软件的质量和可维护性。同时,在重构过程中,我们也可以借鉴原代码的优点,避免重复造轮子,提高开发效率。

posted @   lxylxyaaa  阅读(5)  评论(2编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示