C语言实现学生信息管理程序

本文实例为大家分享了C语言实现学生信息管理程序的具体代码,供大家参考,具体内容如下

目前只有5个功能

1. 增加学生信息

2. 删除学生信息

3. 查询某学生信息

4. 列出所有学生信息

5. 按出生日期先后输出学生信息

代码:

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

struct StuInfo//学生信息

{

char cName[10];

char cSex;

char cNumber[6];

char cTel[13];

int iYear;

int iMonth;

};

typedef struct StuInfo INFO;

void AddStu()//增加学生函数

{

int iLenth;

FILE *fp = NULL;

INFO toAdd;//临时存储新学生信息

system("CLS");

fp = fopen("SavedStudents.txt", "a+"); //a+读写指针在文件尾

if(fp == NULL)

{

puts("Error01");

getchar();getchar();

return;

}

puts("输入信息:\n姓名\t性别\t学号\t出生年月\t手机号");

scanf("%s %c %s %d.%d %s", toAdd.cName, &toAdd.cSex, toAdd.cNumber, &toAdd.iYear, &toAdd.iMonth, toAdd.cTel);

//合法性判断

if(toAdd.cSex != 'F'&&toAdd.cSex != 'M')//性别只能为F或者M

{

puts("性别格式错误!请重新输入性别:");

scanf("%c", &toAdd.cSex);

}

if(toAdd.iYear <= 1980 || toAdd.iYear >= 2017 || toAdd.iMonth>12)

{

puts("日期错误!请重新输入出生日期:");

scanf("%d.%d", &toAdd.iYear, &toAdd.iMonth);//日期格式为1990.1格式

}

iLenth = strlen(toAdd.cTel);//手机号长度

if(iLenth != 11)

{

puts("手机号码格式错误!请重新输入手机号:");

scanf("%s", toAdd.cTel);

}

iLenth = strlen(toAdd.cNumber);

if(iLenth != 5)

{

puts("学号格式错误!请重新输入学号:");

scanf("%s", toAdd.cNumber);

}

//判断结束

fwrite(&toAdd, sizeof(INFO), 1, fp);

fclose(fp);

puts("写入成功!");

puts("按回车返回");

getchar();getchar();

return;

}

void DeleteStu()//通过学号删除学生信息

{

FILE *fp = NULL;

INFO Stu[100];

int i = 0, iCount = 0, iRecord = 0;

char cNumber[6];

system("CLS");

fp = fopen("SavedStudents.txt", "a+");

if(fp == NULL)

{

puts("Error01");

getchar();getchar();

return;

}

rewind(fp);

puts("姓名\t性别\t学号\t出生年月\t手机号");

for(i = 0, iCount = 0;fread(&Stu[i], sizeof(INFO), 1, fp);++i, ++iCount)

{

printf("%s\t%c\t%s\t%d.%d\t\t%s\n", Stu[i].cName, Stu[i].cSex, Stu[i].cNumber, Stu[i].iYear, Stu[i].iMonth, Stu[i].cTel);

}

fclose(fp);

fp = fopen("SavedStudents.txt", "w+"); //覆盖重写

rewind(fp);

puts("输入要删除学生的学号:");

scanf("%s", cNumber);

for(i = 0;i<iCount;i++)

{

if(strcmp(cNumber, Stu[i].cNumber) == 0)

{

iRecord = i;

break;

}

}

for(i = 0;i<iCount;++i)

{

if(i == iRecord)//删除实质为:不向文件写入该条信息

{

continue;

}

else

{

fwrite(&Stu[i], sizeof(INFO), 1, fp);

}

}

fclose(fp);

puts("删除完成!");

puts("按回车返回");

getchar();getchar();

return;

}

void GetInfo()//通过学号取得学生信息

{

FILE *fp;

INFO Stu[100];

char cNumber[6];

int iLenth, iCount = 0, i;

system("CLS");

fp = fopen("SavedStudents.txt", "a+"); //a+读写指针在文件尾

if(fp == NULL)

{

puts("Error01");

getchar();getchar();

return;

}

rewind(fp);

for(;fread(&Stu[iCount], sizeof(INFO), 1, fp);++iCount);//读入并计数

puts("输入你要查询的学号:如:Y1001");

scanf("%s", cNumber);

iLenth = strlen(cNumber);

if(iLenth != 5)

{

puts("学号格式错误!");

puts("按回车返回");

getchar();getchar();

return;

}

for(i = 0;i<iCount;++i)

{

if(strcmp(Stu[i].cNumber, cNumber) == 0)

{

puts("姓名\t性别\t学号\t出生年月\t手机号");

printf("%s\t%c\t%s\t%d.%d\t\t%s\n", Stu[i].cName, Stu[i].cSex, Stu[i].cNumber, Stu[i].iYear, Stu[i].iMonth, Stu[i].cTel);

break;

}

if(i == iCount - 1)

{

puts("没有找到匹配学号!");

}

}

puts("按回车返回");

getchar();getchar();

return;

}

void ListAllInfo()//查看所有学生信息

{

FILE *fp = NULL;

INFO Stu[100], Temp;

int iCount = 0, i = 0, j = 0;

system("CLS");

fp = fopen("SavedStudents.txt", "a+");

if(fp == NULL)

{

puts("Error01");

getchar();getchar();

return;

}

rewind(fp);

for(i = 0, iCount = 0;fread(&Stu[i], sizeof(INFO), 1, fp);++i, ++iCount);

for(i = 0;i<iCount;i++)

{

for(j = 0;j<iCount - 1;j++)

{

if(strcmp(Stu[j].cNumber, Stu[j + 1].cNumber)>0)

{

Temp = Stu[j];

Stu[j] = Stu[j + 1];

Stu[j + 1] = Temp;

}

}

}

puts("姓名\t性别\t学号\t出生年月\t手机号");

for(i = 0;i<iCount;++i)

{

printf("%s\t%c\t%s\t%d.%d\t\t%s\n", Stu[i].cName, Stu[i].cSex, Stu[i].cNumber, Stu[i].iYear, Stu[i].iMonth, Stu[i].cTel);

}

printf("\n共找到[%d]条记录", iCount);

puts("\n按回车返回");

getchar();getchar();

return;

}

void SortAndOut()//排序学生

{

FILE *fp = NULL;

INFO Stu[100], Temp;

int i, j, iCount = 0;

system("CLS");

fp = fopen("SavedStudents.txt", "a+");

if(fp == NULL)

{

puts("Error01");

getchar();getchar();

return;

}

rewind(fp);

for(;fread(&Stu[iCount], sizeof(INFO), 1, fp);++iCount);//读入并计数

for(i = 0;i<iCount - 1;++i)

{

for(j = 0;j<iCount - 1;++j)

{

if(Stu[j].iYear>Stu[j + 1].iYear)

{

Temp = Stu[j];

Stu[j] = Stu[j + 1];

Stu[j + 1] = Temp;

}

if(Stu[j].iYear == Stu[j + 1].iYear&&Stu[j].iMonth>Stu[j + 1].iMonth)

{

Temp = Stu[j];

Stu[j] = Stu[j + 1];

Stu[j + 1] = Temp;

}

}

}

puts("姓名\t性别\t学号\t出生年月\t手机号");

for(i = 0;i<iCount;++i)

{

printf("%s\t%c\t%s\t%d.%d\t\t%s\n", Stu[i].cName, Stu[i].cSex, Stu[i].cNumber, Stu[i].iYear, Stu[i].iMonth, Stu[i].cTel);

}

puts("按回车返回");

getchar();getchar();

return;

}

int main()

{

int iChoice;

puts("1.增加学生\n2.删除学生\n3.查询学生\n4.显示所有学生信息(默认学号排序)\n5.按出生年月排序输出\n0.退出\n输入选择:");

scanf("%d", &iChoice);

while(iChoice != 0)//主界面

{

switch(iChoice)

{

case 1:AddStu();break;

case 2:DeleteStu();break;

case 3:GetInfo();break;

case 4:ListAllInfo();break;

case 5:SortAndOut();break;

default:break;

}

system("CLS");

puts("1.增加学生\n2.删除学生\n3.查询学生\n4.显示所有学生信息(默认学号排序)\n5.按出生年月排序输出\n0.退出\n输入选择:");

scanf("%d", &iChoice);

}

return 0;

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

以上是 C语言实现学生信息管理程序 的全部内容, 来源链接: utcz.com/p/244355.html

回到顶部