C下学生管理系统:从文件中读取30位学生的信息(含邮箱),并实现简单的增、删、查找、统计(邮箱使用人数)。---附程序哦!

本文介绍了一个C语言实现的学生管理系统,包括从文件读取30位学生信息(含邮箱),以及增、删、查找和统计邮箱使用人数的功能。通过查找'@'符号和特定后缀来确定邮箱类型,并统计各类型邮箱的使用数量。程序代码附带。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学生管理系统是初学者网络编程通常要遇到的问题,本人小菜鸟,一个月前做了这一类题,拿出来和初学者分享一下。。。说的不好,有错误欢迎指正( ^_^ )

先说C下(python下也有,见下一篇,两个并不起来,汗):

首先是界面的建立,这个不用说了吧,便于对这个系统进行管理;其次是从文件中读取信息,打开文件,定义指针读取即可;增、删、查找这些都比较简单,略过。重点讲一下如何统计各邮箱的使用人数:因为学生信息是事先知道的,所以只要把他们的各个邮箱种类存放到数据里面(比如char qq[10]="qq.com"),然后从文件中取出每个学生相应的邮箱信息和每个邮箱类的数组strcmp,如果比较结果为0,那么该类的邮箱使用人数就++,这样,最后只要输出就O了。关键性问题来了,如何找到文件中的对应学生的邮箱呢?我是这样想的:找到‘@’作为一个标志,读取它后面的字符,如果以‘.com’结尾就读到m为止,如果以‘.cn’或者其他的非主流邮箱,自己可以想办法找到标志性结尾,这里只提供一种思路,毕竟自己解决自己的问题是最快乐的,我就不夺人之乐了。


自己写的C程序:

#include  <stdio.h>
#include  <stdlib.h>
#include  <string.h>
#define true 1
int Number;
struct student  {  
	char name[20]; 
	char id[10];  
	char sex[10];
	char age[10];
	char tel[12];
	char mail[40];
};    
	int duqu(struct student st[]);//o
	void xianshi(); //o
	void add(); //o
	void select(); //o
	void chazhao(); //o
	void del(); //o
	void tongji(); 
	void fh();  //o
	struct student st[31];  
	struct student stu;
	void main() 
	{ 
		int choose=0;
		FILE *fp=NULL;
		char yesorno;   
		if((fp=fopen("student.txt","rb"))==NULL)  
		{  
			printf("\n=========>提示:文件不存在,是否要创建一个?(y/n)\n"); 
			scanf("%c",&yesorno);  		if(yesorno=='y'||yesorno=='Y')  	
			{   			
				fp=fopen("D:\\student.txt","wb");  
			    fclose(fp);  	
			}  		
			else  		
				exit(0); 
		}  	else  	
		{  		
			Number=duqu(st);  
		}  	
		system("cls");  //清屏
		while(true)   
		{   	
			xianshi();  
			printf("\t\t====>请选择:"); 
			scanf("%d",&choose);  
			system("cls");  	
			switch(choose)  	
			{  		
			case 0: exit(0);fh();break;   	
			case 1: add();fh();break;  		
			case 2: select();fh();break;  	
			case 3: chazhao();fh();break;  
			case 4: del();fh();break;  		
			case 5: tongji();fh();break;  	
			default:break;		  	
			}  		
			fflush(stdin);  //清空输入缓冲区,一是scanf函数未能读取的回车键,此时也可以用getchar();二是输入与scanf函数不能匹配的格式。
			getchar();  	
			system("cls");  
		} 
	}     
	void fh() 
	{ 
		printf("\t===>按Enter键返回主菜单\n");
	}      
	void tongji()  
	{ int i;
	char qq[10]="qq.com";
    char sina[10]="sina.com";
    char onetwosix[10]="126.com";
    char onesixthree[10]="163.com";
    char sohu[10]="sohu.com";
	char bj[10];
	int q=0,s=0,ots=0,ost=0,sh=0;
//.......................................
		     /*FILE *fp;
		     fp=fopen("D:\\mail.txt","w");
			 i=0;
                while (i<Number)
               {
				 fprintf(fp,"%s\n",st[i].mail);
				 i++;
               }
		         fclose(fp);*/
//.........................................
                 FILE *fp2;
		         fp2=fopen("D:\\mail.txt","r");
				 char ch;
   
				 while (! feof(fp2))
				 {
                           memset(bj,0,sizeof(bj));
					 ch=fgetc(fp2);
					 if (ch=='@')
					 {
						 ch=fgetc(fp2);
						 bj[0]=ch;
						 ch=fgetc(fp2);
						 bj[1]=ch;
						 ch=fgetc(fp2);
						 bj[2]=ch;
						 ch=fgetc(fp2);
						 bj[3]=ch;
						 ch=fgetc(fp2);
						 bj[4]=ch;
						 ch=fgetc(fp2);
						 bj[5]=ch;
						 if (ch!='m')
						 {
							 ch=fgetc(fp2);
							 bj[6]=ch;
							 if (ch!='m')
							 {	 
								 ch=fgetc(fp2);
							     bj[7]=ch;
							 }

						 }
					     printf("%s\n",bj);
				
				     }
		

						 if (strcmp((char *)qq,(char *)bj)==0)//(char *)强制转换。。。。
						 {
							 q++;
						 }
						 if (strcmp((char *)sina,(char *)bj)==0)
						 {
							 s++;
						 }
						 if (strcmp((char *)onetwosix,(char *)bj)==0)
						 {
							 ots++;
						 }
						 if (strcmp((char *)onesixthree,(char *)bj)==0)
						 {
							 ost++;
						 }
						 if (strcmp((char *)sohu,(char *)bj)==0)
						 {
							 sh++;
						 }

					 
			     }

				           printf("qq邮箱使用人数:%d\n",q);
                           printf("sina邮箱使用人数:%d\n",s);
                           printf("126邮箱使用人数:%d\n",ots);
                           printf("163邮箱使用人数:%d\n",ost);
                           printf("sohu邮箱使用人数:%d\n",sh);

//...................................待续
	}      
	void del() 
	{  
		FILE *fp=NULL; 
		char id[10];
		int i=0;  
		int j=0;  
		printf("请输入要删除的学生学号:"); 
		scanf("%s",id);  
		for(i=0;i <Number;i++)
		{  		
			if (strcmp(id,st[i].id)==0)  
			{  		
				for (j=i;j <Number-1;j++)  
				{  			
					st[j]=st[j+1];
					st[j+1]=st[30];//把另外一个都变为0。
				}  		
				Number--;  	
			}  
		}  
		fp=fopen("D:\\student.txt","w"); 
		for (i=0;i <Number;i++)  
		{  		
			fwrite(&st[i],sizeof(struct student),1,fp);
		}  
		fclose(fp);  
		printf("删除成功;\n");
	}    
	void chazhao() 
	{ 	
		char id[10];  
		int i=0;  
		printf("请输入要查找学生的学号:");  
		scanf("%s",id);  
		system("cls");  
		printf("\t姓名\t学号\t性别\t年龄\t电话\t邮箱\n");  
		for(i=0;i<Number;i++)  	
		{  		
			if (strcmp(id,st[i].id)==0) 
		    {
				printf("\t%s\t%s\t%s\t%s\t%s\t%s\n",st[i].name,st[i].id,st[i].sex,st[i].age,st[i].tel,st[i].mail); 
			} 
		}  
	}      
	void select() 
	{  
		int i=0;  
		printf("以下是全部学生信息\n");  
		printf("\t姓名\t学号\t性别\t年龄\t电话           \t邮箱\n");  
		for(i=0;i < Number;i++)  	
		{  		
			printf("\t%s\t%s\t%s\t%s\t%s   \t%s\n",st[i].name,st[i].id,st[i].sex,st[i].age,st[i].tel,st[i].mail);
		}  
	}     
	void add() 
	{  
       printf("输入要添加的同学信息\n");  
       printf("姓名:"); 		
       scanf("%s",&stu.name);  
       printf("学号:");  		
       scanf("%s",&stu.id);  	
       printf("性别:");  		
       scanf("%s",&stu.sex);  
       printf("年龄:");  		
       scanf("%s",&stu.age);  
       printf("电话:");  		
       scanf("%s",&stu.tel);  	
       printf("邮箱:");  		
       scanf("%s",&stu.mail); 
         FILE *fp;
         fp=fopen("D:\\student.txt","a");
         while(fp != NULL)
         {
	      fprintf(fp,"\n%s\n%s\n%s\n%s\n%s\n%s",stu.name,stu.id,stu.sex,stu.age,stu.tel,stu.mail);
	      break;
         }	
		 printf("添加成功\n");
		 Number++;
         fclose (fp);
	}     
	int duqu(struct student st[]) 
	{  
		FILE *fp;  
		int i=0;  
		fp=fopen("D:\\student.txt","r"); 
		while(!feof(fp))
		{
			fscanf(fp,"%s\n",&st[i].name);
			fscanf(fp,"%s\n",&st[i].id);
			fscanf(fp,"%s\n",&st[i].sex);
			fscanf(fp,"%s\n",&st[i].age);
			fscanf(fp,"%s\n",&st[i].tel);
			fscanf(fp,"%s\n",&st[i].mail);
			i=i+1;
		}
		fclose(fp);
		return i;
	}    
	void xianshi() 
	{ 
		printf("\t*****************************************************************\n"); 
		printf("\t* *\n");  	
		printf("\t* 学生成绩管理系统 *\n");  
		printf("\t* *\n");  	
		printf("\t* [1] 增加学生信息          [2] 查看学生信息      *\n");  
		printf("\t* [3] 查找学生信息          [4] 删除学生信息      *\n");  
		printf("\t* [5] 统计(邮箱使用人数)  [0] 退出系统          *\n");  
		printf("\t*****************************************************************\n");
	} 





                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值