C语言--宿舍管理系统源码(结构体、指针、文件保存)

本文分享了一段使用C语言编写的宿舍管理系统的源码,涉及结构体、指针及文件保存技术。通过实例代码,阐述了如何利用C语言进行数据结构的定义与操作,以及数据的持久化存储。
摘要由CSDN通过智能技术生成
#include"stdio.h"

#include"stdlib.h"

#include"string.h"

#include "conio.h" 

#include "windows.h"

#define MAX 1000


  /*结构体类型*/

typedef struct  

{   
	int num;/*学号*/
	
	char name[20];/*姓名*/
	
	char sex[5];/*性别*/
	
	int age;/*年龄*/
	
	char studentclass[20];/*班级*/
	
	int dorm;/*宿舍号*/

}STUDENTS;

//查找指针 
typedef struct Points
{
   int a;
   struct Points *points;
}Points;

char xiugai[10]="修改";
char chaxun[10]="查询"; 
char xuehao[]="学号";
char xingming[]="姓名";
char xingbie[]="性别";
char nianling[]="年龄";
char banji[]="班级";
char sushe[]="宿舍";



/*共用的功能块 */


void pause(){
	int i;
	printf("\n\n按任意键加回车返回主菜单!");
    scanf("%d",&i);
    getchar();
} 

void print(STUDENTS stu[],int point){
	printf("\n\n\n学号:%d,姓名:%s,性别:%s,年龄:%d,班级:%s,宿舍号: %d\n",
			 stu[point].num,stu[point].name,stu[point].sex,stu[point].age,stu[point].studentclass,stu[point].dorm);
}

void printfNotFound(){
	printf("找不到该数据\n");
}

void printSearch(STUDENTS stu[],int i){
   printf("		     %7d%11s%10s%10d%12s%12d\n\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].age,stu[i].studentclass,stu[i].dorm);
}

void printHead(){
		printf(" 		-------------------------------------------------------------------------------\n");
	    printf("		-------------------------------------------------------------------------------\n");
	    printf("			学号:     姓名:     性别:     年龄:     班级:     宿舍号:     \n"); 
	    printf(" 		-------------------------------------------------------------------------------\n");
		printf(" 		-------------------------------------------------------------------------------\n\n\n");

}

//默认继续 
int a=1;
void selectOperate(){
	
	button:
	    printf("继续操作请按1,返回主菜单请按0  ");
		scanf("%d",&a);
		if(!(a==1||a==0))	
	 	{		
	 		printf("请输入正确的指令"); 
	 		goto button;		 		
	 	}
}






//读取文件,返回的是总个数 
int read_file(STUDENTS stu[])
{
	FILE *fp;	
    int point=-1;
	fp=fopen("stu.txt","rt");
	if(fp==NULL)	
	{
		printf("\n\n*****库存文件不存在!请创建");	
		return 0;
	}
	while(!feof(fp))	
	{
		point++;
		fread(&stu[point],sizeof(STUDENTS),1,fp);	
	}	
	fclose(fp);	
	return point;

}

//存储数据到文件中 
void save_file(STUDENTS stu[],int sum)//sum是总个数 
{
	FILE *fp;	
	 int i;	
	 if((fp=fopen("temp.txt","w"))==NULL)	
	 {
	 	printf("写文件错误!\n");	
		return;	
	 }	
		for(i=0;i<sum;i++)	
			if(fwrite(&stu[i],sizeof(STUDENTS),1,fp)!=1)	
	  			printf("写文件错误!\n");
	
	fclose(fp);
	remove("stu.txt");
	rename("temp.txt","stu.txt");

}


/*创建学生信息*/
//返回的是总数 
int input(STUDENTS stu[],int sum)
{  
	int x;
   for(;sum<MAX;sum++)
  {
	system("cls");    
	
   printf("                   ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
   printf("                   ▄                                ▄\n");
   printf("                   ▄        创建学生宿舍信息        ▄\n");
   printf("                   ▄                                ▄\n");
   printf("                   ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");

    printf("\n\n                 录入学生信息  (最多%d个)\n",MAX);
    printf("               ----------------------------\n");
    printf("\n                     第%d个学生\n",sum+1);
	printf("\n 请输入学生的学号:");
    scanf("%d",&stu[sum].num);
    printf("\n 请输入学生的姓名:");
    scanf("%s",stu[sum].name); 
	printf("\n 请输入学生的性别:");
    scanf("%s",stu[sum].sex);
    printf("\n 请输入学生的年龄:");   
    scanf("%d",&stu[sum].age);  
    printf("\n 请输入学生的班级:");
    scanf("%s",stu[sum].studentclass);        
    printf("\n 请输入学生的宿舍号:");
    scanf("%d",&stu[sum].dorm);
    printf("		创建成功!");

	//选择操作 
		selectOperate();
		if(a==0)
			return sum+1;	
   }
       return sum+1;

}


/*打印学生信息*/                                                                                                                                                                                                                                                        
void output(STUDENTS stu[],int sum)
{  
   int i;
   system("cls");
   printf("                   ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
   printf("                   ▄                                ▄\n");
   printf("                   ▄        打印学生宿舍信息        ▄\n");
   printf("                   ▄                                ▄\n");
   printf("                   ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");

   printHead(); 
   for(i=0;i<sum;i++)      
  	 printSearch(stu,i);
 	 		
   pause();

}


/*排序  */ 
 


/*复制student*/
//将排好的装在一个新的students数组里 ,不要存到文件中 
 void cpStu(STUDENTS stu0[],STUDENTS stu[],int sum) {
 	int i;
 	for(i=0;i<sum;i++){
 		stu[i].num=stu0[i].num;
 		strcpy(stu[i].name,stu0[i].name);
 		strcpy(stu[i].sex,stu0[i].sex);
 		stu[i].age=stu0[i].age;
 		strcpy(stu[i].studentclass,stu0[i].studentclass);
 		stu[i].dorm=stu0[i].dorm;
 	}	
 }

/*对数据元组排序*/
void exchangeData(STUDENTS *stu1,STUDENTS *stu2){
				stu1->num=stu2->num;
   				
   				stu1->dorm=stu2->dorm; 
					 
				stu1->age=stu2->age;
					 
				strcpy(stu1->name,stu2->name);
					  
				strcpy(stu1->sex,stu2->sex);
					  
				strcpy(stu1->studentclass,stu2->studentclass);	
}


int selectSort(){
	
	int choice;
		
	 printf("\n\n\n     ********请您选择条件进行排序********\n\n");
     printf("                1. 学号\n\n");
     printf("                2. 班级\n\n");
     printf("                3. 宿舍号\n\n");
     printf("                4. 姓名\n\n");
     printf("                0. 返回主菜单\n\n"
  • 7
    点赞
  • 75
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

代码奇才.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值