做的简单的教师信息管理系统,无法实现数据自动保存跟读写,只能手动
将添加的信息写到文件中保存,等程序下次启动时从文件中读取。
我之前写了一个成绩管理系统的代码,基本都是一样的,只是需要把学生结构体换成教师结构体,你参考着改一下就可以了
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//定义学生的最大数量
#define <span class="hljs-symbol">MAXNMB</span> <span class="hljs-number">50</span>
//定义课程数量
#define <span class="hljs-symbol">NMBKC</span> <span class="hljs-number">5</span>
struct <span class="hljs-symbol">Student</span>
{
int number; //学号
char name[<span class="hljs-number">20</span>]; //姓名
int score[<span class="hljs-symbol">NMBKC</span>];//保存课程成绩
float avg; //平均分
int mc; //名次
};
//解析文件中的一行数据
int <span class="hljs-symbol">ParserStr</span>(char* buf,char out[<span class="hljs-symbol">NMBKC</span>][<span class="hljs-number">20</span>])
{
int i = <span class="hljs-number">0</span>;
int j = <span class="hljs-number">0</span>,m = <span class="hljs-number">0</span>;;
char prech = <span class="hljs-string">'a'</span>;
//去掉开头的空格
while(buf[i] == <span class="hljs-string">' '</span>)
i++;
while(buf[i] != <span class="hljs-string">'\0'</span>)
{
if (buf[i] == <span class="hljs-string">'\n'</span> && prech != <span class="hljs-string">' '</span>)
{
out[j][m] = <span class="hljs-string">'\0'</span>;
//printf(<span class="hljs-string">"%d %s\n"</span>,j,out[j]);
prech = <span class="hljs-string">' '</span>;
m = <span class="hljs-number">0</span>;
j++;
i++;
}else if(buf[i] == <span class="hljs-string">' '</span> && prech != <span class="hljs-string">' '</span>)
{
out[j][m] = <span class="hljs-string">'\0'</span>;
//printf(<span class="hljs-string">"%d %s\n"</span>,j,out[j]);
prech = <span class="hljs-string">' '</span>;
m = <span class="hljs-number">0</span>;
j++;
i++;
}else if (buf[i] == <span class="hljs-string">' '</span> && prech == <span class="hljs-string">' '</span>)
{
i++;
}else
{
out[j][m] = buf[i];
prech = buf[i];
m++;
i++;
}
}
if (j== <span class="hljs-symbol">NMBKC</span>+<span class="hljs-number">2</span>)
{
return <span class="hljs-number">1</span>;
}else
return <span class="hljs-number">0</span>;
}
//读取文件
void <span class="hljs-symbol">ReadFile</span>(struct <span class="hljs-symbol">Student</span> stu[],int *nmb,char kecheng[][<span class="hljs-number">20</span>])
{
int i = <span class="hljs-number">0</span>,j = <span class="hljs-number">0</span>;
char buf[<span class="hljs-number">100</span>] = {<span class="hljs-number">0</span>};
char tmp[<span class="hljs-symbol">NMBKC</span>+<span class="hljs-number">2</span>][<span class="hljs-number">20</span>] = {<span class="hljs-number">0</span>};
int t;
<span class="hljs-symbol">FILE</span>* fp;
errno_t err;
if ((err = fopen_s(&fp,<span class="hljs-string">"a.txt"</span>,<span class="hljs-string">"r"</span>)) != <span class="hljs-number">0</span>)
{
printf(<span class="hljs-string">"文件读取失败\n"</span>);
return ;
}
//读取文件
//第一行数据
fgets(buf,<span class="hljs-number">100</span>,fp);
//解析数据
<span class="hljs-symbol">ParserStr</span>(buf,tmp); //解析出课程名称
for (j =<span class="hljs-number">0</span>;j < <span class="hljs-symbol">NMBKC</span>;j++)
{
strcpy_s(kecheng[j],<span class="hljs-number">20</span>,tmp[j+<span class="hljs-number">2</span>]);
}
while(!feof(fp))
{
memset(buf,<span class="hljs-number">0</span>,<span class="hljs-number">100</span>);
fgets(buf,<span class="hljs-number">100</span>,fp); //读取一行
//避免最后一行直接结束
if(buf[strlen(buf)<span class="hljs-number">-1</span>] != <span class="hljs-string">'\n'</span>)
buf[strlen(buf)] = <span class="hljs-string">' '</span>;
memset(tmp,<span class="hljs-number">0</span>,sizeof(tmp));
if(<span class="hljs-symbol">ParserStr</span>(buf,tmp))
{
stu[i].number = atoi(tmp[<span class="hljs-number">0</span>]);
strcpy_s(stu[i].name,<span class="hljs-number">20</span>,tmp[<span class="hljs-number">1</span>]);
stu[i].avg = <span class="hljs-number">0.0</span>;
for(t = <span class="hljs-number">0</span>;t < <span class="hljs-symbol">NMBKC</span>;t++)
{
stu[i].score[t] = atoi(tmp[<span class="hljs-number">2</span>+t]);
stu[i].avg += stu[i].score[t];
}
stu[i].avg /= <span class="hljs-symbol">NMBKC</span>;
i++;
}
}
fclose(fp);
*nmb = i;
//printf(<span class="hljs-string">"总学生数:%d\n"</span>,i);
}
//按平均分排名并写入文件
void <span class="hljs-symbol">SortByavg</span>(struct <span class="hljs-symbol">Student</span> stu[],int nmb,char kecheng[][<span class="hljs-number">20</span>])
{
int i,j;
errno_t err;
struct <span class="hljs-symbol">Student</span> tmp;
char* xh =<span class="hljs-string">"学号"</span>;
char* xm =<span class="hljs-string">"姓名"</span>;
char* pjf =<span class="hljs-string">"平均分"</span>;
char* pm=<span class="hljs-string">"排名"</span>;
<span class="hljs-symbol">FILE</span>* fp;
printf(<span class="hljs-string">"%-6s%-8s"</span>,xh,xm);
for(i=<span class="hljs-number">0</span>;i<<span class="hljs-symbol">NMBKC</span>;i++)
printf(<span class="hljs-string">"%-10s"</span>,kecheng[i]);
printf(<span class="hljs-string">"%-10s%-10s\n"</span>,pjf,pm);
for (i = <span class="hljs-number">0</span>;i< nmb<span class="hljs-number">-1</span>;i++)
{
for (j = <span class="hljs-number">0</span>;j<nmb<span class="hljs-number">-1</span>-i;j++)
{
if(stu[j].avg < stu[j+<span class="hljs-number">1</span>].avg)
{
tmp = stu[j];
stu[j] = stu[j+<span class="hljs-number">1</span>];
stu[j+<span class="hljs-number">1</span>] = tmp;
}
}
}
//屏幕显示
j = <span class="hljs-number">1</span>;
for (i = <span class="hljs-number">0</span>;i<nmb;i++)
{
if (i == <span class="hljs-number">0</span>)
{
stu[i].mc = <span class="hljs-number">1</span>;
printf(<span class="hljs-string">"%-6d%-10s%-10d%-10d%-10d%-10d%-10d%.2f%5d\n"</span>,stu[i].number,stu[i].name,stu[i].score[<span class="hljs-number">0</span>],stu[i].score[<span class="hljs-number">1</span>],stu[i].score[<span class="hljs-number">2</span>],stu[i].score[<span class="hljs-number">3</span>],stu[i].score[<span class="hljs-number">4</span>],stu[i].avg,j);
}else
{
if(stu[i].avg != stu[i<span class="hljs-number">-1</span>].avg)
j++;
stu[i].mc = j;
printf(<span class="hljs-string">"%-6d%-10s%-10d%-10d%-10d%-10d%-10d%.2f%5d\n"</span>,stu[i].number,stu[i].name,stu[i].score[<span class="hljs-number">0</span>],stu[i].score[<span class="hljs-number">1</span>],stu[i].score[<span class="hljs-number">2</span>],stu[i].score[<span class="hljs-number">3</span>],stu[i].score[<span class="hljs-number">4</span>],stu[i].avg,j);
}
}
//写文件
if ((err = fopen_s(&fp,<span class="hljs-string">"file2.txt"</span>,<span class="hljs-string">"w"</span>)) != <span class="hljs-number">0</span>)
{
printf(<span class="hljs-string">"文件打开失败\n"</span>);
return;
}
//屏幕显示
fprintf(fp,<span class="hljs-string">"%-6s%-8s"</span>,xh,xm);
for(i=<span class="hljs-number">0</span>;i<<span class="hljs-symbol">NMBKC</span>;i++)
fprintf(fp,<span class="hljs-string">"%-10s"</span>,kecheng[i]);
fprintf(fp,<span class="hljs-string">"%-10s%-10s\n"</span>,pjf,pm);
j = <span class="hljs-number">1</span>;
for (i = <span class="hljs-number">0</span>;i<nmb;i++)
{
if (i == <span class="hljs-number">0</span>)
{
fprintf(fp,<span class="hljs-string">"%-6d%-10s%-10d%-10d%-10d%-10d%-10d%.2f%5d\n"</span>,stu[i].number,stu[i].name,stu[i].score[<span class="hljs-number">0</span>],stu[i].score[<span class="hljs-number">1</span>],stu[i].score[<span class="hljs-number">2</span>],stu[i].score[<span class="hljs-number">3</span>],stu[i].score[<span class="hljs-number">4</span>],stu[i].avg,j);
}else
{
if(stu[i].avg != stu[i<span class="hljs-number">-1</span>].avg)
j++;
fprintf(fp,<span class="hljs-string">"%-6d%-10s%-10d%-10d%-10d%-10d%-10d%.2f%5d\n"</span>,stu[i].number,stu[i].name,stu[i].score[<span class="hljs-number">0</span>],stu[i].score[<span class="hljs-number">1</span>],stu[i].score[<span class="hljs-number">2</span>],stu[i].score[<span class="hljs-number">3</span>],stu[i].score[<span class="hljs-number">4</span>],stu[i].avg,j);
}
}
fclose(fp);
}