如何用C语言实现简易学生管理系统

一、实验功能的整体描述

在这里插入图片描述

二、程序的总体结构描述

在这里插入图片描述

三、各个子功能如何实现

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、遇到的问题解决方法

在这里插入图片描述

五、C源代码分享与交流

#define _CRT_SECURE_NO_WARNINGS 1
//定义_CRT_SECURE_NO_WARNINGS可以避免由scanf()在VS2010中产生的警告

#include<stdio.h>
#include<string.h>
#define NUM 50

/*
课程设计名称:学生管理系统
完成人姓名  :
完成人学号  :
实现功能    :详见菜单
优化的地方:1.用户误输入,菜单对应的小写也可启动对应的功能,增加程序的容错性;
			2.查找未果时,提示查询未果并返回菜单;
			3.罗列学生、课程、关联信息的时候增加目录输出行方便观看;
			4.程序退出时,提示问候语;
不足的地方:1.没能实现输入学生学号后再罗列学生信息时按照学号进行有序输出;
			2.A功能不能完成成绩由高到低有序排列...
*/


//定义并重定义学生、课程、关联结构体
typedef struct student
{
	char no[NUM];
	char name[NUM];
	short age;//短整型节省空间
	char gender[NUM];
}Student;

typedef struct course
{
	char name[NUM];
	float point;//浮点类型
}Course;

typedef struct link
{
	char student_no[NUM];
	char course_name[NUM];
	short score;
}Link;

//定义全局结构体变量数组和全局变量
Student student_list[100];
int student_count=0;
Course course_list[100];
int course_count=0;
Link link_list[100];
int link_count=0;

//函数定义放main()之后,此处应有函数声明
void list_student();
void list_course();
void list_link();
void add_student();
void add_course();
void add_link();
void delete_student();
void delete_course();
void delete_link();
void query_student();
void query_course();

int main()
{
	FILE*fp;
	char buffer[100];
	char choice;

	//读取student.txt文件
	fp=fopen("student.txt","r");//只读
	while(fgets(buffer,100,fp))//如果成功读取到一行数据,返回值为非空,即真;否则返回值为空,即假,退出循环。
	{
		//用fggets函数将学生信息存入buffer,再将刚存入的学生信息输入到学生结构体变量数组里面去,sscanf数据的时候要加&
		sscanf(buffer,"%s %s %d %s",student_list[student_count].no,student_list[student_count].name,&student_list[student_count].age,student_list[student_count].gender);
		student_count++;
	}
	fclose(fp);

	//读取course.txt文件
	fp=fopen("course.txt","r");//只读
	while(fgets(buffer,100,fp))
	{
		//用fggets函数将课程信息存入buffer,再将刚存入的课程信息输入到课程结构体变量数组里面去,sscanf数据的时候要加&
		sscanf(buffer,"%s %f",course_list[course_count].name,&course_list[course_count].point);
		course_count++;
	}
	fclose(fp);

	//读取link.txt文件
	fp=fopen("link.txt","r");//只读
	while(fgets(buffer,100,fp))
	{
		//用fggets函数将关联信息存入buffer,再将刚存入的关联信息输入到关联结构体变量数组里面去,sscanf数据的时候要加&
		sscanf(buffer,"%s %s %d",link_list[link_count].student_no,link_list[link_count].course_name,&link_list[link_count].score);
		link_count++;
	}
	fclose(fp);

	do{
		printf("1. add student\n");
        printf("2. remove student\n");
        printf("3. list student\n");
        printf("4. add course\n");
        printf("5. remove course\n");
        printf("6. list course\n");
        printf("7. add link\n");
        printf("8. remove link\n");
        printf("9. list link\n");
        printf("A. query student\n");
        printf("B. query course\n");
        printf("C. quit\n");
        printf("Choice: ");
        scanf(" %c", &choice);//scanf会读取printf中最后一个字符
        switch (choice) {
            case '1':
                add_student();
                break;
            case '2':
                delete_student();
                break;
            case '3':
                list_student();
                break;
            case '4':
                add_course();
                break;
            case '5':
                delete_course();
                break;
            case '6':
                list_course();
                break;
            case '7':
                add_link();
                break;
            case '8':
                delete_link();
                break;
            case '9':
                list_link();
                break;
            case 'A':
                query_student();
                break;
			case 'a':
                query_student();
                break;
            case 'B':
                query_course();
                break;
			case 'b':
                query_course();
                break;
            case 'C':
                printf("谢谢使用!\n");
                break;
			case 'c':
                printf("谢谢使用!\n");
                break;
            default:
                printf("输入错误,请重新输入!\n");
                break;
        }
    } while (choice != 'C');
return 0;
}


//函数的定义
//罗列学生信息
void list_student(){
	int i;
	printf("学号\t姓名\t年龄\t性别\n");
	for(i=1;i<student_count;i++)
	{
		printf("%s\t%-8.8s%d\t%s\n",student_list[i].no,student_list[i].name,student_list[i].age,student_list[i].gender);
		//格式化输出姓名的时候不能用%s,因为student.txt文件中zhangshan字符已经达到制表位最大,会再向后输出一个制表位
	}
}

//罗列课程信息
void list_course(){
	int i;
	printf("名称    学分\n");
	for(i=1;i<course_count;i++)
	{
		printf("%s\t%.1f\t\n",course_list[i].name,course_list[i].point);//学分要用浮点类型
	}
}

//罗列关联信息
void list_link(){
	int i;
	printf("学号\t课程\t分数\n");
	for(i=1;i<link_count;i++)
	{
		printf("%s\t%s\t%d\n",link_list[i].student_no,link_list[i].course_name,link_list[i].score);
	}
}

//增加学生信息
void add_student()
{
	printf("请输入学生信息:\n");
	printf("学号: ");
	scanf(" %s",student_list[student_count].no);
	printf("姓名: ");
	scanf(" %s",student_list[student_count].name);
	printf("年龄: ");
	scanf(" %d",&student_list[student_count].age);
	printf("性别: ");
	scanf(" %s",student_list[student_count].gender);
	student_count++;
	//student_count++保证了list_student函数的调用可以列出新增的这条学生信息,并且下一次新增学生信息的时候学生信息数组起始位置往后移一位
}

//增加课程信息
void add_course(){
	printf("请输入课程信息:\n");
	printf("名称: ");
	scanf(" %s",course_list[course_count].name);
	printf("学分: ");
	scanf(" %f",&course_list[course_count].point);
	course_count++;
	//course_count++保证了list_course函数的调用可以列出新增的这条课程信息,并且下一次新增课程信息的时候课程信息数组起始位置往后移一位
}

//增加关联信息
void add_link(){
	printf("请输入关联信息:\n");
	printf("学号: ");
	scanf(" %s",link_list[link_count].student_no);
	printf("课程: ");
	scanf(" %s",link_list[link_count].course_name);
	printf("成绩: ");
	scanf(" %d",&link_list[link_count].score);
	link_count++;
	//link_count++保证了list_link函数的调用可以列出新增的这条关联信息,并且下一次新增关联信息的时候关联信息数组起始位置往后移一位
}

//删除学生信息
void delete_student(){
	char student_no[NUM];
	int i;
	int index=-1;//取负数不用担心和数组下标相撞
	printf("请输入要删除学生信息的学生学号:  ");
	scanf(" %s",&student_no);
	for(i=0;i<student_count;i++){//遍历学生数组,如果找到了,第i次找到的,i就是数组下标
		if(strcmp(student_list[i].no,student_no)==0)//strcmp函数:相同返回0
		{
			index=i;
		}
	}
	if(index==-1)
	{
		printf("未查询到该名学生\n");
		//scanf(" %s",&student_no);
	}
	else
	{
		for(i=index;i<student_count-1;i++)//此处循环从找到的学生结构体数组为起始点,不断用后一结构体信息覆盖掉前一结构体信息
		{	
				student_list[i]=student_list[i+1];
		}
		student_count--;//保证在list_student函数调用的时候,少一位学生信息
	}
}

//删除课程信息
void delete_course(){
	char course_no[NUM];
	int i;
	int index=-1;//取负数不用担心和数组下标相撞
	printf("请输入要删除课程信息的课程名称:  ");
	scanf(" %s",&course_no);
	for(i=0;i<course_count;i++){//遍历课程数组,如果找到了,第i次找到的,i就是数组下标
		if(strcmp(course_list[i].name,course_no)==0)//strcmp函数:相同返回0,等于0则为真
		{
			index=i;
		}
	}
	if(index==-1)
	{
		printf("未找到该课程,请再次输入课程名称: ");
		scanf(" %s",&course_no);
	}
	else
	{
		for(i=index;i<course_count-1;i++)
		{	
				course_list[i]=course_list[i+1];//此处循环从找到的课程结构体数组为起始点,不断用后一结构体信息覆盖掉前一结构体信息
		}
		course_count--;//保证在list_course函数调用的时候,少一门课程信息
	}
}

//删除关联信息
void delete_link()
{
	char link_no[NUM];
	char link_course[NUM];
	int i;
	int index=-1;//取负数不用担心和数组下标相撞
	printf("请输入要删除关联信息的学生学号:  ");
	scanf(" %s",&link_no);
	printf("请输入要删除关联信息的课程名称:  ");
	scanf(" %s",&link_course);

	for(i=0;i<link_count;i++){//遍历关联数组,如果找到了,第i次找到的,i就是数组下标
	if(strcmp(link_list[i].student_no,link_no)==0&&strcmp(link_list[i].course_name,link_course)==0)
		{
			index=i;
		}
	}

	if(index==-1)
	{
		printf("未找到该关联信息\n");
		//printf("未找到该关联信息!\n请输入要删除关联信息的学生学号:  ");
		//scanf(" %s",&link_no);
		//printf("请再次输入要删除关联信息的课程名称:  ");
		//scanf(" %s",&link_course);
	}
	else
	{
		for(i=index;i<link_count-1;i++)//此处循环从找到的关联结构体数组为起始点,不断用后一结构体信息覆盖掉前一结构体信息
		{	
				link_list[i]=link_list[i+1];
		}
		link_count--;//保证在list_link函数调用的时候,少一个关联信息
	}
}
//输入学生学号,输出学生所有科目成绩
void query_student(){
	int i;
	int j=0;
	int flag=1;
	int count=0;
	char student_no[NUM];
	Link query_student[NUM];
	printf("请输入想要查询课程成绩的学生学号: ");
	scanf(" %s",student_no);
	for(i=0;i<link_count;i++)
	{
		if(strcmp(link_list[i].student_no,student_no)==0)
		{
				query_student[j]=link_list[i];
				flag=0;
				j++;
				count++;
		
		}
}
	if(flag==1)
	{
	printf("未查询到该同学相关课程信息!\n");
	}
	if(flag==0){
	printf("课程\t分数\n");
	for(i=0;i<count;i++)
	{
		printf("%s\t%d\n",query_student[i].course_name,query_student[i].score);
	}
	}
}
输入课程名称,输出该课程下所有学生成绩
void query_course(){
	int i=0;
	int j=0;
	int k=0;
	int flag=1;
	int count=0;
	char course_name[NUM];
	Link query_course[NUM];
	Link course_switch[NUM];
	printf("请输入想要查询课程名称 ");
	scanf(" %s",course_name);
	for(i=0;i<link_count;i++)
	{
		if(strcmp(link_list[i].course_name,course_name)==0)
		{
				query_course[j]=link_list[i];
				flag=0;
				j++;
				count++;
		
		}
}
	if(flag==1)
	{
	printf("未查询到该课程相关成绩信息!\n");
	}
	if(flag==0){
	printf("学号\t分数\n");
	for(i=0;i<count;i++)
	{
		printf("%s\t%d\n",query_course[i].student_no,query_course[i].score);
	}
	}
}
#include<stdio.h> #include<stdlib.h> #include<malloc.h> #include<string.h> #define ID struct id struct id { char name[20]; // xing ming int num; // xue hao int age; // nian ling char sex[2]; // xing bie char xi[20]; // xi bie char zhuan[20]; // zhuan ye char add[20]; // di zhi ID *next; // }; // FILE *fp; // ID *head; int sum_age=0,max_age=0,min_age=100,pc=0; float ave_age=0; ID *creat() { ID *p1,*p2,*head; int pd; p1=p2=head=NULL; printf("\t\t\t 开始输入记录!!!\n"); printf("please input pd:\n"); scanf("%d",&pd); while(pd!=0) { p1=(ID*)malloc(sizeof(ID)); printf("请输入学生的学号:\n");scanf("%d",&p1->num); printf("请输入学生的姓名:\n");scanf("%s",p1->name); printf("请输入学生的年龄:\n");scanf("%d",&p1->age); sum_age+=p1->age; if(max_age<p1->age) max_age=p1->age; if(min_age>p1->age) min_age=p1->age; printf("请输入学生的性别:\n");scanf("%s",p1->sex); printf("请输入学生的系别:\n");scanf("%s",p1->xi); printf("请输入学生的专业:\n");scanf("%s",p1->zhuan); printf("请输入学生的地址:\n");scanf("%s",&p1->add); if(head==NULL) { head=p1; p2=p1; } else { p2->next=p1; p2=p1; } printf("please input pd:\n"); scanf("%d",&pd); pc++; } p2->next=NULL; return(head); } /*输入/添加记录*/ ID *insert(ID *head) { ID *temp,*p1,*p2; int pd; start: p1=head; printf("插入操作开始!!!\n"); temp=(ID *)malloc(sizeof(ID)); printf("请输入学生的学号:\n");scanf("%d",&temp->num); printf("请输入学生的姓名:\n");scanf("%s",temp->name); printf("请输入学生的年龄:\n");scanf("%d",&temp->age); printf("请输入学生的性别:\n");scanf("%s",temp->sex); printf("请输入学生的系别:\n");scanf("%s",temp->xi); printf("请输入学生的专业:\n");scanf("%s",temp->zhuan); printf("请输入学生的地址:\n");scanf("%s",temp->add); if (head==NULL) { head=temp; temp->next=NULL; } else { while(p1!=NULL) { p2=p1; p1=p1->next; } p2->next=temp; temp->next=NULL; } printf("插入末尾成功"); pc++; printf("是否继续插入 1.Yes 2.No;\n"); scanf("%d",&pd); if(pd==1) goto start; return (head); } /*删除学生记录*/ ID *delet(ID *head) { ID *p1,*p2; int num; printf("请输入要删除的学生的学号:");scanf("%d",&num); p1=head; if (head==NULL) { printf("没有记录\n"); goto end; } while(num!=p1->num && p1!=NULL) { p2=p1;p1=p1->next; } if(num==p1->num) { if (p1==head) head=p1->next; else p2->next=p1->next; printf("删除成功!!!\n"); pc--; //free(p1); //free(p2); } end:return head; } /*查找学生记录*/ ID *search(ID *head) { ID *p1,*p2; int num; printf("请输入要查找的学生的学号:");scanf("%d",&num); p1=head; while(num!=p1->num && p1!=NULL) { p2=p1;p1=p1->next; } if(num==p1->num) { printf("学生的学号:%d\n",p1->num); printf("学生的姓名:%s\n",p1->name); printf("学生的年龄:%d\n",p1->age); printf("学生的性别:%s\n",p1->sex); printf("学生的系别:%s\n",p1->xi); printf("学生的专业:%s\n",p1->zhuan); printf("学生的地址:%s\n",&p1->add); //free(p1); //free(p2); } return head; } /*按学号查询学生记录进行修改*/ ID *modify_num(ID *head) { ID *p; int i,m,n,num; start: printf("请输入要修改的学生的学号:"); scanf("%d",&num); p=head; while(p!=NULL ) { if(num==p->num) { m=1; while(m==1) { m=0; printf("\t\t 1.修改学生的学号\n"); printf("\t\t 2.修改学生的姓名\n"); printf("\t\t 3.修改学生的年龄\n"); printf("\t\t 4.修改学生的性别\n"); printf("\t\t 5.修改学生的系别\n"); printf("\t\t 6.修改学生的专业\n"); printf("\t\t 7.修改学生的地址\n"); printf("请选择(1--7):"); scanf("%d",&i); switch( i ) { case 1 : printf("请输入修改后的学号:"); scanf("%d",&p->num); break; case 2: printf("请输入修改后的姓名:"); scanf("%s",p->name); break; case 3: printf("请输入修改后的年龄:"); scanf("%d",&p->age); break; case 4: printf("请输入修改后的性别:"); scanf("%s",&p->sex); break; case 5: printf("请输入修改后的系别:"); scanf("%s",p->xi); break; case 6: printf("请输入修改后的专业:"); scanf("%s",p->zhuan); break; case 7: printf("请输入修改后的地址:"); scanf("%s",p->add); break; default: printf("输入错误,请重新输入"); } } break; } p=p->next; } printf("是否继续修改其他学生情况(1改 2不改):"); scanf("%d",&n); if(n==1)goto start; else return head; } /*退出程序*/ void ask_age() { if(pc==0) { printf("没有记录\n"); return ; } ave_age=float(sum_age*1.0/pc); printf("%f\n",ave_age); printf("%d\n",max_age); printf("%d\n",min_age); } /*显示结果函数*/ void print(ID *head) { ID *p; p=head; printf("\t\t\t*****************\n"); printf("显示结果是:\n"); if(head!=NULL) do { printf("%10d%10s%10d%10s%10s%10s%10s\n",p->num,p->name,p->age,p->sex,p->xi,p->zhuan,p->add); p=p->next; } while(p!=NULL); } void main() { ID *head; int choise; printf("\t\t\t* * * * 李林C语言课设* * * *\n"); while(1) { printf("\t\t 学生信息管理系统\n"); printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); printf("\t\t 1.建立文件\n"); printf("\t\t 2.插入数据\n"); printf("\t\t 3.删除数据\n"); printf("\t\t 4.修改记录\n"); printf("\t\t 5.搜索记录\n"); printf("\t\t 6.求年龄\n"); printf("\t\t 0.退出\n"); printf("\n"); printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); printf("请选择(0-6):"); scanf("%d",&choise); switch(choise) { case 1: head=creat(); print(head); break; case 2: head=insert(head); print(head); break; case 3: head=delet(head); print(head); break; case 4: head=modify_num(head); print(head); break; case 5:search(head); print(head); break; case 6:ask_age(); break; case 0: exit(0); break; default :printf("输入错误,请重新输入!\n"); } } } ★★★★★★★★★★★★★★★★★★★★★★★★★★★ #include "stdio.h" #include "stdlib.h" #include "string.h" #include "conio.h" #include "stdlib.h" #define null 0 struct record { char name[20]; char phone[20]; char adress[40]; char postcode[10]; char e_mail[30]; }student[500]; struct LinkList { struct record US; struct LinkList *next; }a; struct LinkList *head=null; int num=0; FILE *fp; int menu_select(); int adduser(); int list(); int search(); int display(); int add(); int listbyname(); int dele(); int save(); int exit(); void main() { system("cls"); for(;;) { switch(menu_select()) { case 0:adduser();break; case 1:list();break; case 2:search();break; case 3:display();break; case 4:add();break; case 5:listbyname();break; case 6:dele();break; case 7:save();break; case 8:exit(0); } } } menu_select() { char s[80]; int a; printf("*_* press any key enter menu! *_* \n"); getch(); system("cls"); printf("\t\t********************MENU*********************\n\n"); printf("\t\t 0. 输入记录\n"); printf("\t\t 1. 显示记录 \n"); printf("\t\t 2. 按姓名查找\n"); printf("\t\t 3. 按电话号码查找\n"); printf("\t\t 4. 插入记录 \n"); printf("\t\t 5. 按姓名排序\n"); printf("\t\t 6. 删除记录\n"); printf("\t\t 7. 记录保存文件\n"); printf("\t\t 8. Quit\n"); printf("\t\t***********************************************\n"); do{ printf("\n Enter you choice(0~11):"); scanf("%s",s); a=atoi(s); } while (a<0||a>11); return a; } adduser() { printf("\n\t\t**************** 请输入用户信息 ****************\n"); printf("\n\t\t输入姓名:"); scanf("%s",&student[num].name); printf("\n\t\t输入电话号码:"); scanf("%s",&student[num].phone); printf("\n\t\t输入地址:"); scanf("%s",&student[num].adress); printf("\n\t\t输入邮编:"); scanf("%s",&student[num].postcode); printf("\n\t\t输入e-mail:"); scanf("%s",&student[num].e_mail); num++; printf("\n\t\t是否继续添加?(Y/N):"); if (getch()=='y') adduser(); return(0); } list() { int i; system("cls"); if(num!=0) { printf("\n\t\t*************** 以下为通讯录所有信息************"); for (i=0;i<num;i++) { printf("\n\t\t姓名: %s",student[i].name); printf("\n\t\t电话: %s",student[i].phone); printf("\n\t\t地址: %s",student[i].adress); printf("\n\t\t邮编: %s",student[i].postcode); printf("\n\t\te-mail:%s",student[i].e_mail); printf("\t\t"); if (i+1<num) { printf("\n\t\t__________________________"); system("pause"); } } printf("\n\t\t************************************************"); } else printf("\n\t\t通讯录中无任何纪录"); printf("\n\t\t按任意键返回主菜单:"); getch(); return(0); } search() { int mark=0; int i; int a=0; printf("\n\t\t***************** 按姓名查找 *******************"); char name[20]; printf("\n\t\t请输入姓名:"); scanf("%s",name); for(i=a;i<num;i++) { if (strcmp(student[i].name,name)==0) { printf("\n\t\t************* 以下是您查找的用户信息 ***********"); printf("\n\t\t姓名: %s",student[i].name); printf("\n\t\t电话: %s",student[i].phone); printf("\n\t\t地址: %s",student[i].adress); printf("\n\t\te-mail:%s",student[i].e_mail); printf("\n\t\t************************************************"); mark++; if ((i+1)<num) { printf("\n\t\t是否继续查找相同名字的用户信息:(y/n)"); if (getch()=='y') { a=i; continue; } else return(0); } else { printf("\n\t\t按任意键返回主菜单"); getch(); return(0); } } } if(mark!=0) { printf("\n\t\t没有相同姓名的用户纪录"); printf("\n\t\t按任意键返回主菜单"); getch(); return(0); } else { printf("\n\t\t没有相同姓名的用户纪录"); printf("\n\t\t按任意键返回主菜单"); getch(); return(0); } } display() { int mark=0; int i; int a=0; printf("\n\t\t****************** 按电话查找 ******************"); char phone[10]; printf("\n\t\t请输入电话号码:"); scanf("%s",phone); for(i=0;i<num;i++) { if (strcmp(student[i].phone,phone)==0) { printf("\n\t\t************** 以下是您查找的用户信息 **********"); printf("\n\t\t姓名: %s",student[i].name); printf("\n\t\t电话: %s",student[i].phone); printf("\n\t\t地址: %s",student[i].adress); printf("\n\t\te-mail:%s",student[i].e_mail); printf("\n\t\t************************************************"); printf("\n\t\t按任意键返回主菜单:"); mark++; getch(); return(0); } } if (mark==0) { printf("\n\t\t没有改用户的信息"); printf("\n\t\t按任意键返回主菜单"); getch(); return(0); } return(0); } add() { int i; if ((fp=fopen("student.bin","wb"))==NULL) { printf("\n\t\t文件打开失败"); } for (i=0;i<num;i++) { if (fwrite(&student[i],sizeof(struct record),1,fp)!=1) { printf("\n\t\t写入文件错误!\n"); } printf("\n\t\t**************** 请输入用户信息 ****************\n"); printf("\n\t\t输入姓名:"); scanf("%s",&student[num].name); printf("\n\t\t输入电话号码:"); scanf("%s",&student[num].phone); printf("\n\t\t输入地址:"); scanf("%s",&student[num].adress); printf("\n\t\t输入邮编:"); scanf("%s",&student[num].postcode); printf("\n\t\t输入e-mail:"); scanf("%s",&student[num].e_mail); num++; printf("\n\t\t是否继续添加?(Y/N):"); if (getch()=='y') adduser(); return(0); } fclose(fp); printf("\n\t\t通讯录文件已保存"); printf("\n\t\t按任意键退出程序\n\t\t"); exit(0); return(0); } void deletebyphone() { int i,j; int deletemark=0; char phone[20]; printf("\n\t\t请输入要删除用户电话号码:"); scanf("%s",phone); if(num==0) { printf("\n\t\t对不起,文件中无任何纪录"); printf("\n\t\t按任意键返回主菜单"); getch(); return; } for (i=0;i<num;i++) { if (strcmp(student[i].phone,phone)==NULL) { printf("\n\t\t以下是您要删除的用户纪录:"); printf("\n\t\t姓名: %s",student[i].name); printf("\n\t\t电话: %s",student[i].phone); printf("\n\t\t地址: %s",student[i].adress); printf("\n\t\te-mail:%s",student[i].e_mail); printf("\n\t\t是否删除?(y/n)"); if (getch()=='y') { for (j=i;j<num-1;j++) student[j]=student[j+1]; num--; deletemark++; printf("\n\t\t删除成功"); printf("\n\t\t是否继续删除?(y/n)"); if (getch()=='y') deletebyphone(); return; } else return; } continue; } if (deletemark==0) { printf("\n\t\t没有该用户的纪录"); printf("\n\t\t是否继续删除?(y/n)"); if (getch()=='y') deletebyphone(); return; } } void deletebyname() { int a=0; int findmark=0; int j; int deletemark=0; int i; char name[20]; printf("\n\t\t请输入要删除用户姓名:"); scanf("%s",name); for (i=a;i<num;i++) { if (strcmp(student[i].name,name)==NULL) { printf("\n\t\t以下是您要删除的用户纪录:"); findmark++; printf("\n\t\t________________________________"); printf("\n\t\t姓名: %s",student[i].name); printf("\n\t\t电话: %s",student[i].phone); printf("\n\t\t地址: %s",student[i].adress); printf("\n\t\te-mail:%s",student[i].e_mail); printf("\n\t\t________________________________"); printf("\n\t\t是否删除?(y/n)"); if (getch()=='y') { for (j=i;j<num-1;j++) student[j]=student[j+1]; num--; deletemark++; printf("\n\t\t删除成功"); if((i+1)<num) { printf("\n\t\t是否继续删除相同姓名的用户信息?(y/n)"); if (getch()=='y') { a=i; continue; } } printf("\n\t\t是否继续删除?(y/n)"); if (getch()=='y') deletebyname(); return; } if((i+1)<num) { printf("\n\t\t是否继续删除相同姓名的用户信息?(y/n)"); if (getch()=='y') { a=i; continue; } } } else continue; } if ((deletemark==0)&&(findmark==0)) { printf("\n\t\t没有该用户的纪录"); printf("\n\t\t是否继续删除?(y/n)"); if (getch()=='y') deletebyphone(); return; return; } else if (findmark!=0) { printf("\n\t\t没有重名信息"); printf("\n\t\t没有该用户的纪录"); printf("\n\t\t是否继续删除?(y/n)"); if (getch()=='y') deletebyphone(); return; return; } } dele() { char choic; printf("\n\t\t1-按电话号码删除 2-按姓名删除"); printf("\n\t\t请选择:"); choic=getch(); switch (choic) { case '1':deletebyphone();break; case '2':deletebyname();break; } return(0); } listbyname() { int i,j; struct record tmp; for (i=1;i<num;i++) { if(strcmp(student[i].name,student[i-1].name)<0) { tmp=student[i]; j=i-1; do { student[j+1]=student[j]; j--; }while ((strcmp(tmp.name,student[j].name)<0&&j>=0)); student[j+1]=tmp; } } printf("\n\t\t排序成功,是否显示?(y/n)"); if (getch()=='y') list(); return(0); } save() { int j; FILE*fp; fp=fopen("student.txt","w"); if (fp==NULL) printf("can't open the file."); if(num!=0) { for(j=0;j<num;j++) { fwrite(student,sizeof(student),1,fp); } } printf("保存成功!"); fclose(fp); return(0); }
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一直学不会编程的小徐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值