当前位置:编程学习 > C/C++ >>

C语言课程设计——学生学籍管理系统

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
#define N 100 /*存储100个学生的学籍信息*/
int flag; /*标记是否登录*/
struct date /*出生日期*/
{
    int year;
    int month;
    int day;
};
struct student
{
	char num[20];/*学号*/
	char name[25];/*姓名*/
	char 易做图[10];/*性别*/
	struct date birthday;/*出生年月*/
	int age;/*年龄*/
	char addr[50];/*籍贯*/
	char dept[50]; /*系别*/
    char major[30]; /*专业*/
	char classs[30]; /*班级*/
	char phone[20];/*电话*/
}stu[N];

void login() /*登录*/
{
	void menu();
	system("cls");
	if(flag)
	{
		printf("  已经登录!\n");
		printf("Press any key to continue…\n");
		getchar();
		getchar();
		system("cls");
		menu();
	}
	int load();
	int n,i,m,w;
	FILE *fp;
    if((fp=fopen("D:\\file.txt","rb"))!=NULL) /*不是空文件*/
      n=load(); /*打开文件*/
	else
	  n=0;
	struct student s;
	char password[20];
	int d,q;
	printf("\n\t请选择登录身份:1.管理员      2.用户     [ ]\b\b");
    scanf("%d",&d);
	if(d==1)
	{
		printf("\n\t\t\t请输入密码:");
		getchar();
		int j=0;
		while(1)
        {
            password[j]=getch();
            if(password[j]=='\r')
              break;
            printf("*");
            j++;
        }
        password[j]='\0';
		if(!strcmp(password,"930322")) /*判断密码是否正确*/
		{
			flag=1;
			printf("\n\t登录成功!\n");
			printf("\tPress [ Enter ] key to continue…");
			getchar();
			system("cls");
			menu();
		}
		if(!flag)
		{
		   printf("\t\n密码错误!\n");
           printf("What do you want to do next? 1.继续登录  2.返回菜单   [ ]\b\b");
		   scanf("%d",&q);
		   if(q==1) /*继续登录*/
		   {
			   system("cls");
		       login();
		   }
		   else if(q==2) /*返回主菜单*/
		   {
			   system("cls");
			   menu();
		   }
		}
	}
    else
	{
	   printf("\n\t\t\t用户名:");
	   scanf("%s",s.name);
	   printf("\t\t\t密码:");
	   int j=0;
	   while(1)
        {
            password[j]=getch();
            if(password[j]=='\r')
              break;
            printf("*");
            j++;
        }
       password[j]='\0';
       flag=0; /*未登录时flag=0*/
	   for(i=0;i<n;i++)
	     if(!strcmp(s.name,stu[i].name)&&!strcmp(s.name,password))
		 {
		   flag=1; /*登录成功flag=1*/
		   break;
		 }
	  if(flag)
	  {
		 printf("\n\t登录成功!\n");
		 printf("\tPress any key to continue…\n");
		 getchar(); getchar();
		 system("cls");
	     menu(); /*登录成功后返回主菜单*/
	  }
	  else
	  {
		m=0; /*设置m是为了避免陷入 登录失败时 跳不出登录界面*/
		w=1; /*设置w是为了避免输出多次 “用户不存在”*/
		int q; /*q为选项*/
		do
		{
			if(w>0)
			   printf("用户名不存在或密码错误!\n"); /*第一次登录时输入不存在的用户时显示*/
		    printf("What do you want to do next? 1.继续登录  2.返回菜单   [ ]\b\b");
		    scanf("%d",&q);
		    if(q==1) /*继续登录*/
			{
				login();
				m=1;
			}
		    else if(q==2) /*返回主菜单*/
			{
				system("cls");
				menu();
				m=1;
			}
			else
			{
				printf("选择错误!请重新选择:\n");
				w=0;
			}
		}while(m==0);
	  }
	}
}

void printf_one(int k) /*输出一个学生的信息*/
{
	system("color 4e");
	printf("学号:%s\n",stu[k].num);
	printf("姓名:%s\n",stu[k].name);
	printf("性别:%s\n",stu[k].易做图);
	printf("出生年月:%d/%d/%d\n",stu[k].birthday.year,stu[k].birthday.month,stu[k].birthday.day);
	printf("年龄:%d\n",stu[k].age);
    printf("籍贯:%s\n",stu[k].addr);
	printf("系别:%s\n",stu[k].dept);
	printf("专业:%s\n",stu[k].major);
	printf("班级:%s\n",stu[k].classs);
	printf("电话:%s\n",stu[k].phone);
}

void printf_n(int n) /*浏览时输出所有学生的信息*/
{
	system("color 2e");
	int j,i=1;
    for(j=0;j<n;j++)
	{
		printf("第%d个学生:\n",i++);
		printf_one(j);
 		printf("\n");
	}
  getchar();
}

int load() /*打开文件,读取里面的数据*/
{
	FILE *fp;
    int i;
    if((fp=fopen("D:\\file.txt","rb"))==NULL) /*读入空文件,rb表示打开一个二进制文件,只允许读数据*/
	{
		printf("\n文件不存在!请输入:\n");
        return 0;
	}
    for(i=0;!feof(fp);i++)  /*处理到文件结尾*/
       fread(&stu[i],sizeof(struct student),1,fp);  /*fread(buffer,size,cout,fp)将磁盘文件中的一批数据作为一个整体一次性读取出来,
	buffer指定数据块位置,sizeof数据块字节数,count读取次数,fp指向源磁盘文件*/
    fclose(fp);
    return(i-1);
}

void input(int k) /*输入学生信息*/
{
	getchar();
	printf("学号:");   gets(stu[k].num);
	printf("姓名:");   gets(stu[k].name);
	printf("性别:");   gets(stu[k].易做图);
	printf("出生年月:");  scanf("%d/%d/%d",&stu[k].birthday.year,&stu[k].birthday.month,&stu[k].birthday.day);
	printf("年龄:");   scanf("%d",&stu[k].age);  getchar();
    printf("籍贯:");   gets(stu[k].addr);
	printf("系别:");   gets(stu[k].dept);
	printf("专业:");   gets(stu[k].major);
	printf("班级:");   gets(stu[k].classs);
	printf("电话:");   gets(stu[k].phone);
}

void save(int n) /*保存学生信息*/
{
	void exit();
	FILE *fp;
	int i;
    if((fp=fopen("D:\\file.txt","wb"))==NULL) /*只打开或建立一个二进制文件,只允许写数据*/
	{
		printf("\nCan not open file!\n");
        exit();
	}
    for(i=0;i<n;i++)
      if(stu[i].name[0]!='\0')
         if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1) /*将一批数据作为一个整体一次性写入磁盘文件*/
            printf("文件写入错误!\n");
    fclose(fp);
}

void printf_back()/*添加学生信息后显示的“是浏览还是返回”*/
{
   int w,k=0;
   void browse();
   void menu();
   printf("\n\n\t^_^.插入成功. ^_^\n\n");
   do
   {
      printf("What do you want to do next?\n\n\t1).浏览所有\t2).返回:  [ ]\b\b");
      scanf("%d",&w);
      if(w==1)
	  {
		  system("cls");
		  browse();
	  }
      else if(w==2)
	  {
		  system("cls");
		  menu();
	  }
      else
	      printf("  选择错误!请重新选择!\n");
   }while(k==0);
}

void insert() /*添加学生信息*/
{
    int i,n,k,t;
    FILE *fp;
    if((fp=fopen("D:\\file.txt","rb"))==NULL) /*读入空文件,rb表示打开一个二进制文件,只允许读数据*/
	{
		printf("How many people do you want to add(1-%d)?:",N-1);
		n=0;
	}
	else
	{
	  n=load();
      printf("How many student do you want to insert (1-%d)?:",N-n-1);
	}
    scanf("%d",&t);
    k=n+t;
    for(i=n;i<k;i++)
	{
	   printf("\n输入第 %d 个学生学籍信息.\n",i-n+1);
	   input(i);
	}
    save(k); /*保存所有学生的信息*/
    printf_back();
}

void deleter() /*删除*/
{
	void menu();
	if(!flag)
	{
		printf("\n\n\t请先登录!\n");
		printf("\n\t请按 Enter 键进入登录界面!");
		getchar();
		getchar();
		login();
	}
	else
	{
	    struct student s;
	    int i,n,k,w0,w1;
        n=load();
        do
		{
	        k=-1;
            //printf_n(n); /*删除之前先显示所有学生的信息*/
            do
			{
	             printf("\n\n请输入您想要删除的学生的姓名!\nName:");
                 scanf("%s",s.name);
                 for(i=0;i<n;i++)
                   if(strcmp(s.name,stu[i].name)==0)
				   {
		              k=i;
		              s=stu[i];
				   }
                 if(k==-1)
				 {
					 int m;
					 printf("\n\n没有这个学生的信息!\n");
                     printf("What do you want to do next? 1.继续输入  2.返回主菜单    [ ]\b\b");
                     scanf("%d",&m);
					 if(m==1)
补充:软件开发 , C语言 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,