编程考核---文件与链表的操作应用

​ 编程考核—文件与链表的操作应用

#include<stdio.h>
#include<string.h>
#include<stdlib.h> 
char n[20][20],x[20][20],f[20][20],p[20][20];
typedef struct student{
	char name[20];
	char xuehao[20];
	char fangxiang[20];
	char phone[20];
	struct student*next;
}*linklist;
void menu(){
	printf("*********************************************\n");
	printf("        软件科技协会成员信息      \n");
	printf("                                  \n");
	printf("           [0]退出程序            \n");
	printf("           [1]输出成员信息        \n");
	printf("           [2]找到成员并删除      \n");
	printf("           [3]添加新成员          \n");
	printf("           [4]更改联系方式        \n");
}
linklist Init()
{
	linklist head=(linklist)malloc(sizeof(struct student));
    head->next=NULL;
    return head;
}
void insert(linklist head,char n[],char x[],char f[],char p[]){
	linklist h=(linklist)malloc(sizeof(struct student));//开辟节点很重要啊啊啊啊啊啊 
	if(head->next==NULL){
	strcpy(h->name,n);
	strcpy(h->xuehao,x);
	strcpy(h->fangxiang,f);
	strcpy(h->phone,p);
    head->next=h;
    h->next=NULL;
	}
	else{
	strcpy(h->name,n);
	strcpy(h->xuehao,x);
	strcpy(h->fangxiang,f);
	strcpy(h->phone,p);
	h->next=head->next;
	head->next=h; 
}
}
void deletestu(linklist head){
	int flag=0;
	printf("请输入要删除的人名\n");
	char Name[20];
	linklist p=head->next;
	linklist cur=head;
	scanf("%s",&Name);
	while(p){
		if(strcmp(p->name,Name)==0){  //要是strcmp,不能是p->name==Name 
			cur->next=p->next;
			free(p);
			flag=1;
			break;
		}
		cur=cur->next;
		p=p->next;
	}
	if(flag==1)
	printf("操作成功\n");
	else{
		printf("操作失败\n");
	} 
}
linklist add(linklist head){
	linklist newmem=(linklist)malloc(sizeof(struct student));
	printf("请输入该成员的相关信息\n"); 
	printf("请输入该成员的姓名\n");
	printf("请输入该成员的学号\n");
	printf("请输入该成员的学习方向\n");
	printf("请输入该成员的联系方式\n"); 
	scanf("%s %s %s %s",&newmem->name,&newmem->xuehao,&newmem->fangxiang,&newmem->phone);
	newmem->next=head->next;
	head->next=newmem;
	printf("操作成功\n"); 
	return newmem; 
}

void alter(linklist head){
	int flag=0; 
	char Name[20];
	printf("输入要更改的尘缘的名字\n");
	scanf("%s",&Name);
	linklist cur=head;
	linklist p=head->next;
	while(p){
		if(strcmp(p->name,Name)==0){
			flag=1;
			break;
		}
		p=p->next;
		cur=cur->next;
	}
	if(flag==1){
		printf("查找成功\n");
		printf("请输入要更改的联系方式\n");
		char Phone[20];
		scanf("%s",&Phone);
		strcpy(p->phone,Phone);
		printf("操作成功\n"); 
	}
	else{
		printf("不好意思,没有这个人\n");
	}
}
void paixu(linklist head){
	linklist p,q;
	char arr[20];
	if( head==NULL){
		return ;
	}
	if( head->next==NULL){
		return ;
	}
    for(p=head->next;p!=NULL;p=p->next){
    	for(q=p->next;q!=NULL;q=q->next){
    		if(strcmp(p->xuehao,q->xuehao)>0){
//    			arr=p->xuehao;
//    			p->xuehao=q->xuehao;
//    			q->xuehao=arr;
      strcpy(arr,p->xuehao);
      strcpy(p->xuehao,q->xuehao);
      strcpy(q->xuehao,arr);
			}
		}
	}

} 
void print(linklist head){
	printf("姓名\t   学号\t   方向\t   联系方式\t\n");
	linklist p=head->next;
	while(p!=NULL){
		printf("%s\t   %s\t   %s\t   %s\t\n",p->name,p->xuehao,p->fangxiang,p->phone);
		p=p->next;
	}
}
int main()
{
	linklist head=Init();
	FILE* pf=fopen("D:\\members.txt","r");
	if(pf==NULL){
		printf("读取文件失败\n");
	}
	else{
		printf("读取成功\n");
	}
	for(int i=0;i<5;i++){
		fscanf(pf,"%s %s %s %s",&n[i],&x[i],&f[i],&p[i]);
	}
	fclose(pf);
	for(int i=1;i<5;i++){
	insert(head,n[i],x[i],f[i],p[i]);
	}
	int n;
	menu();
	while(scanf("%d",&n)!=-1){
		switch (n){
			case 0:
				printf("退出程序\n");
				return 0; 
				break;
			case 1:
			    paixu(head);
				print(head);
				break;
			case 2:
			deletestu(head);
			print(head);
			break;
			case 3:
			add(head);
			print(head);
			break;
			case 4:
			alter(head);
			print(head);
			break;
			defalt :
			break;	
		}
	}

}
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值