学生管理系统(结构体)一周目

题目:学生成绩管理(结构体数组、函数、指针、文件、选择、循环)

学生记录包括学号、姓名、语文成绩、数学成绩、总成绩。

程序显示功能选择:1、成绩信息添加;2、成绩信息显示;3、成绩信息查询;4、成绩信息记录(根据输入的姓名);5、修改成绩信息(根据输入的姓名);6、保存成绩信息;7、退出。

********************************************************************************************

不全是自己的东西的说            2017/12

#include<stdio.h>             /*标准输入输出函数库*/
#include<stdlib.h>            /*标准函数库*/
#include<string.h>            /*字符串函数库*/
#define FILENAME "phone.dat"
struct date                //定义一个结构体类型数组
	{ 	char name[10];            /*姓名*/
        char sex[20];
        char age[20];
        char address[50];
		char phone[12];
		char qq[20];
	 }per[10];     
                   
int menu()               //主菜单选择函数
	{ 	int c;                  //定义一个整型变量
		do{ 
		system("cls");                       //清屏
	    printf("\t**************欢迎登录通讯录管理系统*******************\n");
		printf("\t--------------------\n");
		printf("\t   1、通讯信息增加  \n");
		printf("\t   2、通讯信息显示  \n");
		printf("\t   3、通讯信息查询  \n");
        printf("\t   4、通讯信息删除  \n");
        printf("\t   5、通讯信息修改  \n");
        printf("\t   6、通讯信息保存  \n");
        printf("\t   7. 退出          \n");
	    printf("\t--------------------\n");
		printf("\t请您选择(1-7):"); 
	scanf("%d",&c);             
		}while(c>7&&c<1); 
		return(c); 
	} 
int Input(struct date per[10],int n) 
{	int i=0; 
	char sign,x[10];                      
	while(sign!='n'&&sign!='N') 
	{   printf("\tname:"); 
		scanf("%s",per[n+i].name); 
		printf("\tsex:");
		scanf("%s",per[n+i].sex);
		printf("\tage:");
		scanf("%s",per[n+i].age);
        printf("\taddress:");
		scanf("%s",per[n+i].address);
        printf("\tphone:");
		scanf("%s",per[n+i].phone);
        printf("\tqq:");
		scanf("%s",per[n+i].qq);

		gets(x);   
		printf("\n\t是否继续添加?(Y/N)"); 
		fflush(stdin);                                                    //清空缓存
		scanf("%c",&sign); 
		i++; 
	} 
	return(n+i); 
} 
void writeToFile(struct date per[10],int n)
{	FILE *fp=NULL;
	int i=0;

	fp=fopen("phone.dat","wb");

	if(fp==NULL)
	{	printf("打开文件出错!\n");
		exit(0);
	}

	for(i=0;i<10;i++)
		fwrite(&per[i],sizeof(per),1,fp);                          //把字节为1的信息写入文件

	fclose(fp);
}
void Display(struct date per[10],int n)                                         
{ 	int i; 
	printf("----------------------------------------------------------------------\n");                          //格式/ 
	printf("  姓名 性别 年龄 籍贯 联系电话  qq号\n"); 
	printf("----------------------------------------------------------------------\n"); 
	for(i=1;i<n+1;i++)                                                            
	{ 
		printf("%-15s%-15s%-15s%-14s%-14s%-14s\n",per[i-1].name,per[i-1].sex,per[i-1].age,per[i-1].address,per[i-1].phone,per[i-1].qq); 
		if(i>1&&i%10==0)                                                          
		{	printf("\t-----------------------------------\n"); 
			printf("\t"); 
			getchar();
        getchar(); 
			printf("\t-----------------------------------\n"); 
		} 
	} 
	printf("----------------------------------------------------------------------\n");
	getchar();
    getchar();
}

int Delete_a_record(struct date per[10],int n) 
{ 	char s[20]; 
	int i=0,j; 
	printf("\t请输入想删除记录中的名字:"); 
	scanf("%s",s); 
	while(strcmp(per[i].name,s)!=0&&i<n) i++; 
	if(i==n) 
	{printf("\t通讯录中没有此人!\n"); 
		return(n); 
	} 
	for(j=i;j<n-1;j++)
	{ 	strcpy(per[j].phone,per[j+1].phone); 
		strcpy(per[j].name,per[j+1].name); 
		strcpy(per[j].qq,per[j+1].qq);
		strcpy(per[j].age,per[j+1].age);
	} 
	printf("\t\t\t已经成功删除!\n"); 
	return(n-1); 
} 


void Query_a_record(struct date per[10],int n) 
{ 	int m;
	printf("\t\n请选择查询方式:\n");
    printf("\t┌──────┐\n");
    printf("\t│1------姓名 │\n");
    printf("\t│2------电话 │\n");
    printf("\t│3------返回 │\n");
    printf("\t└──────┘\n");
    printf("请选择:");
    scanf("%d",&m);
    while(m!=1&&m!=2&&m!=3&&m!=4)
    { 
		printf("输入错误,请重新选择:");
		scanf("%d",&m);
	}

	if(m==1)
	{	char s[20]; 
		int i=0; 
		printf("\t请输入想查询的姓名:"); 
		scanf("\t%s",s); 
		while(strcmp(per[i].name,s)!=0&&i<n) i++; 
		if(i==n) 
		{
			printf("\t通讯录中没有此人!\n"); 
			return; 
		} 
		printf("\t电话号码: %s\n",per[i].phone); 
		printf("\t年龄: %s\n",per[i].age);
        printf("\t性别: %s\n",per[i].sex);
        printf("\tqq:%s\n",per[i].qq);
        printf("\t籍贯: %s\n",per[i].address);
	} ;

	if(m==2)
	{     char s[20]; 
		int i=0; 
		printf("\t请输入想查询的电话:"); 
		scanf("\t%s",s); 
		while(strcmp(per[i].phone,s)!=0&&i<n) i++; 
		if(i==n) 
		{
			printf("\t通讯录中没有此人!\n"); 
			return; 

		} 
		printf("\t此人姓名: %s\n",per[i].name);
        printf("\t籍贯: %s\n",per[i].address);
        printf("\t性别: %s\n",per[i].sex);
		printf("\t此人qq: %s\n",per[i].qq); 
		printf("\t年龄: %s\n",per[i].age);
	} ;
}

void Change(struct date per[10],int n) 
{   char s[20]; 
	int i=0; 
	printf("\t请输入想修改的记录中的名字:"); 
	scanf("%s",s); 
	while(strcmp(per[i].name,s)!=0&&i<n) i++; 
	if(i==n) 
	{    printf("\t通讯录中没有此人!\n"); 
		return; 
	} 
	printf("姓名:"); 
	scanf("%s",per[i].name); 
    printf("性别:"); 
	scanf("%s",per[i].sex);
    printf("籍贯:"); 
	scanf("%s",per[i].address); 
	printf("电话号码:"); 
	scanf("%s",per[i].phone); 
	printf("qq:"); 
	scanf("%s",per[i].qq);
	printf("年龄:");
	scanf("%s",per[i].age);
	printf("\n修改成功!");
}
void WritetoText(struct date per[10],int n)             
{    int i=0; 
	FILE *fp;                                           //定义文件指针
	char filename[20];                                    //定义文件名 
	printf("\t保存到文件\n");                             //输入文件名
	if((fp=fopen("phone.dat","w"))==NULL)                   
	{    printf("\t无法打开文件\n"); 
		getchar();
        getchar(); 
		return; 
	} 
	fprintf(fp,"***************************************通讯录********************************\n");
	fprintf(fp,"     姓名 性别 年龄 籍贯 联系电话 QQ号\n");
	fprintf(fp,"-----------------------------------------------------------------------------\n");
	while(i<n) 
	{ fprintf(fp,"%-10s\t%-20s\t%-20s\t%-20s\t%-20s\t%-20s\n",per[i].name,per[i].sex,per[i].age,per[i].address,per[i].phone,per[i].qq); 
		i++; 
	}
	fprintf(fp,"-------------------------------------------------------------------------\n");
	fprintf(fp,"********************************共有%d条记录***************************\n",n); 
	fclose(fp);                                                 //关闭文件
	printf("保存成功!\n"); 
} 

int main()                                                     //主函数 
{ int n=0,i;
while(1)
{ switch (menu()) 
{ case 1: 
		printf("\n\t添加记录到通讯录\n");                     //添加记录 
		n=Input(per,n); 
		break; 
case 2: 
		printf("\n\t\t\t    通讯录记录表\n");                      //显示记录
		Display(per,n); 
		break;
case 3: 
		printf("\n\t在通讯录中查找记录\n"); 
		Query_a_record(per,n);							 //查找记录
		printf("\t"); 
		getchar();
        getchar();
		break;

case 4: 
		printf("\n\t从通讯录中删除记录\n"); 
		n=Delete_a_record(per,n);						    //删除记录
		printf("\t"); 
		getchar();
        getchar(); 
		break; 

case 5: 
		printf("\n\t修改通讯录中的记录\n"); 
		Change(per,n);								    //修改数据
		printf("\t"); 
		getchar();
        getchar(); 
		break;
		

        

case 6: 
		printf("\n\t保存功能\n"); 
		WritetoText(per,n);						          //保存数据
		printf("\t"); 
		getchar();
        getchar();                                    //操作完成后进行暂停
		break;

		
case 7: 
		printf("\n\t\t谢谢使用,再见!\n");                        //结束程序
		printf("\n\t\t"); 
		getchar();
        getchar(); 
		exit(0); 
		} 
}	
}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
当然可以!以下是一个使用结构体数组实现的简单学生管理系统的示例代码: ```c #include <stdio.h> #include <string.h> #define MAX_STUDENTS 100 struct Student { char name[50]; int age; float gpa; }; int main() { struct Student students[MAX_STUDENTS]; int numStudents = 0; while (1) { printf("1. 添加学生\n"); printf("2. 显示所有学生\n"); printf("3. 退出\n"); printf("请选择操作:"); int choice; scanf("%d", &choice); switch (choice) { case 1: { if (numStudents == MAX_STUDENTS) { printf("学生数量已达上限!\n"); break; } printf("请输入学生姓名:"); scanf("%s", students[numStudents].name); printf("请输入学生年龄:"); scanf("%d", &students[numStudents].age); printf("请输入学生GPA:"); scanf("%f", &students[numStudents].gpa); numStudents++; break; } case 2: { if (numStudents == 0) { printf("没有学生记录!\n"); break; } printf("所有学生的信息:\n"); for (int i = 0; i < numStudents; i++) { printf("学生姓名:%s\n", students[i].name); printf("学生年龄:%d\n", students[i].age); printf("学生GPA:%f\n", students[i].gpa); printf("--------------------\n"); } break; } case 3: printf("感谢使用学生管理系统!\n"); return 0; default: printf("无效的选择!\n"); break; } } } ``` 这个示例代码使用了一个 `Student` 结构体来表示学生的信息,包括姓名、年龄和GPA。使用结构体数组 `students` 来存储多个学生的信息。通过一个循环菜单,可以选择添加学生、显示所有学生或退出程序。每次添加学生时,会依次输入学生的姓名、年龄和GPA,并将其存储到结构体数组中。显示所有学生时,会遍历结构体数组并逐个打印出学生的信息。 请注意,本示例没有对输入进行严格的错误处理和边界检查,仅作为简单的演示。在实际开发中,应该根据需求进行适当的输入验证和错误处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值