⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 del_user.cpp

📁 C语言的课程设计。图书管理系统。有一些系统功能不怎么完善
💻 CPP
字号:
#include"acridine.h"
#include"string.h"
#include"malloc.h"
#include"iostream.h"
int judge_number(int &i,char string[]);//i为字符串的长度,通过i,可以对字符串的长度进行限制
void limit_name(char a[]);//名字的限制输入,只能包括汉字和字母

void deluser(member &head)//删除会员,在链表中删除结点并把新链表读进文件中覆盖文件原来的信息,更新
{//本函数用到的变量有,nm[20],*p,*q,t
	char nm[30];
	user *p,*q;
	int t=0;
	FILE *fp;
	if((fp=fopen("acridine_massage.txt","w+"))==NULL)//打开文件
		cout<<"          打开文件失败!\n";
	p=head;
	cout<<"          请输入你要删除的会员的用户名:\n"<<endl;
	limit_name(nm);
	while(p!=NULL)//从第一个结点起查找是否有这个会员名,如果有将t的值变为1,并用指针指向p的前一个指针,指针p用来查找要删除的结点
	{
		if(strcmp(p->user_name,nm)==0)
		{
			t++;
			break;
		}
		q=p;
		p=p->next;
	}
	if(p==head&&p!=NULL)//如果第一个结点的会员名与输入的名字相同则把指针指向下一个结点
	{
		   	if(p->borrow_num!=0)
			{
loop1:		    cout<<"          该会员还没清还所有图书,真的要删除吗?"<<endl;
             	cout<<"               1.是,我要删除此会员"<<endl;
                cout<<"               0.退出"<<endl;
	            char n[2];
            	int i;
            	n[0]=-1;
             	judge_number(i,n);
            	switch(n[0])
				{
            	case'1':
	                	head=p->next;
		                free(p);					
	                 	break;
               	case'0':
	                   	return;
	            default:
			            cout<<"          输入不正确!"<<endl;
			            goto loop1;
				}
			}
			else
			{
			  head=p->next;
			  free(p);
			}
		
	}
	else//否则就把p的前后两个结点连接起来
	{
		if(t)
		{
    		if(p->borrow_num!=0)
			{
loop:		    cout<<"          该会员还没清还所有图书,真的要删除吗?"<<endl;
             	cout<<"               1.是,我要删除此会员"<<endl;
                cout<<"               0.退出"<<endl;
	            char n[2];
            	int i;
            	n[0]=-1;
             	judge_number(i,n);
            	switch(n[0])
				{
            	case'1':
	                	q->next=p->next;
			            free(p);					
	                 	break;
               	case'0':
	                   	return;
	            default:
			            cout<<"          输入不正确!"<<endl;
			            goto loop;
				}
			}
			else
			{
				q->next=p->next;
			       free(p);
			}
		}
		else//若t为0则提示找不到你要删除的会员
		{
			cout<<"          找不到你要删除的会员!"<<endl;
			return;
		}
	}
	q=head;
   	while(q!=NULL)//用while循环把链表的信息读进文件里面
	{
	 	fprintf(fp,"%ld %s %s %s %s %s %d\n",q->UserID,q->true_name,q->user_name,q->sex,q->phone,q->code,q->borrow_num);
	 	q=q->next;
	}
	fclose(fp);//关闭文件
  	cout<<"          删除成功!"<<endl;
	
}

/*
int writeintobook(member &yonghu);

int deluser(int a)//删除会员的函数,形参a表示从主函数调过来的要删除的会员的编号
{
	member yonghu;
	member p1,p2,p3;
	FILE *fp;	
	if((fp=fopen("acridine_massage.txt","r+"))==NULL)
	{
		printf("cannot open file\n");
		return 0;
	}
	int i=0;
	while(!feof(fp))//把文件里的所有信息读进链表
	{
		p1=(user*)malloc(sizeof(user));
		fscanf(fp,"%ld %s %s %s %s %s %d\n",&p1->UserID,p1->true_name,p1->user_name,p1->sex,p1->phone,p1->code,&p1->borrow_num);
		p1->next=NULL;
		if(0==i)yonghu=p1;
		else p2->next=p1;
		p2=p1;
		i++;
	}
	fclose(fp);
	p2=p3=yonghu;
	while(p2!=NULL)
	{
		if(p2->UserID==a)//假如输入的编号存在,分为三种情况删除
		{
			if(p2==yonghu)//head要删除的是第一个结点
			{
				yonghu=p2->next;
				//free(p2);break;
			}
			else if(p2->next==NULL)//rear要删除的是最后一个结点
			{
				p3->next=NULL;
				//free(p2);break;
			}
			else//中间部分的结点
			{
				p3->next=p2->next;
			}
			free(p2);
			writeintobook(yonghu);return 1;
		}
		p3=p2;
		p2=p2->next;
	}
	printf("找不到该用户的编号,无法删除\n");//没有该会员,进行提示
	return 0;
}*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -