- 里论外几
-
/*你把所有标记为“选题”的内容改为“选课”即可,用的不是链表,是随机文件*/
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define szSTR 256
#define szNAME 10
#define szGROUP 5 /*每个小组最多允许5名组员,包括组长*/
#define fileAssignments "c:\0.txt"
#define fileProjects "c:\1.txt"
#define cntTYPE 4
/*题目*/
char Types[cntTYPE][11] = {"数据结构类", "趣味类", "管理类", "自选类"};
struct TAssignment {
int number; /*题目编号*/
int level; /*难度系数*/
int type; /*类别*/
char title[szSTR];
char requirements[szSTR]; /*技术要求*/
char features[szSTR]; /*技术特点*/
};
time_t Date_Input(char * msg)
{
struct tm t; memset(&t, 0, sizeof(t));
printf("请输入%s日期,格式为年/月/日:", msg);
scanf("%d/%d/%d", &(t.tm_year), &(t.tm_mon), &(t.tm_mday));
t.tm_year -= 1900;
t.tm_mon --;
return mktime(&t);
}
void Date_Print(time_t t)
{
struct tm * ft = localtime(&t);
printf("%04d/%02d/%02d", ft->tm_year + 1900, ft->tm_mon + 1, ft->tm_mday);
}
void Number_Input(char * msg, int * x)
{
for(;;) {
printf("请输入%s,以回车结束:", msg);
scanf("%d", x);
if(*x < 0) *x = -*x;
if(*x) break;
printf("错误的输入,请重新输入。 ");
}
}
void String_Input(char * msg, char * str)
{
printf("请输入%s,以回车结束:", msg);
fflush(stdin);
fgets(str, szSTR, stdin);
}
int Type_Input(void)
{
int t = 0, i = 0;
for(;;) {
printf("请输入题目类别:");
for(i = 0; i < cntTYPE; i++) printf("%d - %s ", i, Types[i]);
printf(" ");
t = getch() - "0";
if(t >= 0 && t <= cntTYPE) break;
printf("错误的输入 ");
}
return t;
}
fpos_t ASSG_Query(int number)
{
FILE * f = 0; fpos_t p = 0;
struct TAssignment a;
if(number < 1) return 0;
f = fopen(fileAssignments, "rb");
if(!f) {
fprintf(stderr, "题目文件无法打开 ");
return 0;
}
while(!feof(f)) {
fgetpos(f, &p);
fread(&a, sizeof(a), 1, f);
if(a.number == number) {
fclose(f);
return p + 1;
}
}
fclose(f);
return 0;
}
void ASSG_Append(void)
{
FILE * f = 0; fpos_t p = 0;
struct TAssignment a;
memset(&a, 0, sizeof(a));
Number_Input("题目编号", &(a.number ));
p = ASSG_Query(a.number );
if(p) {
fprintf(stderr, "该题目已存在。 ");
return ;
}
Number_Input("难度系数", &(a.level));
String_Input("题目名称", a.title );
a.type = Type_Input();
String_Input("技术要求", a.requirements);
String_Input("技术特点", a.features);
f = fopen(fileAssignments, "ab");
if(!f) {
fprintf(stderr, "题目文件无法打开 ");
return ;
}
fwrite(&a, sizeof(a), 1, f);
fclose(f);
}
void ASSG_Delete(void)
{
fpos_t p = 0; FILE * f = 0;
struct TAssignment a;
Number_Input("题目编号", &(a.number ));
p = ASSG_Query(a.number );
if(p == 0) {
fprintf(stderr, "该题目不存在。 ");
return ;
}
p--;
f = fopen(fileAssignments, "rb+");
if(!f) {
fprintf(stderr, "题目文件无法打开! ");
return ;
}
fsetpos(f, &p);
memset(&a, 0, sizeof(a));
fwrite(&a, sizeof(a), 1, f);
fclose(f);
printf("删除成功! ");
}
void PrintLine(void)
{
int i = 0; for(i=0; i<79; i++) putchar("-");
putchar(" ");
}
void ASSG_Report(void)
{
FILE * f = 0; struct TAssignment a; int r = 0;
f = fopen(fileAssignments, "rb");
if(!f) {
fprintf(stderr, "目前数据库中没有题目。 ");
return ;
}
printf(" 题目数据库 ");
while(!feof(f)) {
r = fread(&a, sizeof(a), 1, f);
if(r < 1) break;
if(a.number == 0) continue;
PrintLine();
printf("【编号】%d 【类别】%s 【难度系数】%d 【题目】%s【技术要求】%s【技术特点】%s",
a.number , Types[a.type ], a.level ,
a.title , a.requirements , a.features );
}
fclose(f);
printf(" ");
}
void ASSG_Brief(int number)
{
struct TAssignment a; FILE * f = 0;
fpos_t p = ASSG_Query(number);
if(!p) {
printf("【尚未选题】 ");
return ;
}
p--;
f = fopen(fileAssignments, "rb");
fsetpos(f, &p);
fread(&a, sizeof(a), 1, f);
fclose(f);
printf("【题目编号】%d【类别】%s【难度系数】%d 【题目】%s",
a.number , Types[a.type ], a.level ,a.title );
}
int ASSG_Choose(void)
{
int number = 0; fpos_t p = 0;
Number_Input("题目编号", &number);
p = ASSG_Query(number);
return p?number:0;
}
void ASSG_Menu(void)
{
int cmd = 0;
for(;;) {
printf("*****题目管理***** 0-查看 1-新增 2-删除题目 任意键返回 ");
cmd = getch() - "0";
switch(cmd) {
case 0: ASSG_Report(); break;
case 1: ASSG_Append(); break;
case 2: ASSG_Delete(); break;
default: return ;
}
}
}
/*项目信息*/
struct TProject {
int group_number; /*组号*/
char members[szGROUP][szNAME]; /*小组成员,编号0为组长*/
int assignment; /*选题*/
time_t date_open; /*开题日期*/
time_t date_close; /*结题日期*/
char teacher[szNAME];/*指导教师*/
int process; /*进度0~100%*/
char jobs[szSTR]; /*分工*/
int score; /*评分*/
};
void PROJ_Report(void)
{
struct TProject p; int r = 0;
FILE * f = fopen(fileProjects, "rb");
if(!f) {
fprintf(stderr, "目前没有开放项目信息。 ");
return;
}
printf("*****项目及小组信息***** ");
while(!feof(f)) {
r = fread(&p, sizeof(p), 1, f);
if(r < 1) break;
if(p.group_number ==0) continue;
PrintLine();
printf("【组号】%d 【指导教师】%s【组长】%s ",
p.group_number , p.teacher , p.members[0]);
printf("【组员】%s %s %s %s ", p.members[1], p.members[2], p.members[3], p.members[4]);
printf("【分工】%s", p.jobs );
ASSG_Brief(p.assignment );
if(p.assignment ) {
printf("【开题日期】"); Date_Print(p.date_open);
printf("【结题日期】"); Date_Print(p.date_close);
printf("【进度】%d%%【评分】%d ", p.process, p.score );
}
}
fclose(f);
PrintLine();
}
fpos_t PROJ_Query(int number)
{
struct TProject p; fpos_t q = 0; int r = 0;
FILE * f = fopen(fileProjects, "rb");
if(!f) return 0;
while(!feof(f)) {
fgetpos(f, &q);
r = fread(&p, sizeof(p), 1, f);
if(r < 1) break;
if(p.group_number == number) {
fclose(f);
return q+1;
}
}
fclose(f);
return 0;
}
void PROJ_Append(void)
{
struct TProject p; fpos_t q = 0; FILE * f = 0; int i = 0;
memset(&p, 0, sizeof(p));
Number_Input("项目小组编号", &(p.group_number));
q = PROJ_Query(p.group_number );
if(q) {
fprintf(stderr, "该小组已经存在。 ");
return ;
}
printf("请录入组员信息,第一个组员是组长:");
for(i = 0; i< 5; i++) scanf("%s", p.members [i]);
printf("请输入指导教师姓名:"); scanf("%s", p.teacher );
String_Input("分工信息", p.jobs );
f = fopen(fileProjects, "ab");
fwrite(&p, sizeof(p), 1, f);
fclose(f);
printf("项目小组已创建,可以从菜单进行选题。 ");
}
void PROJ_Delete(void)
{
struct TProject p; fpos_t q = 0; FILE * f = 0;
memset(&p, 0, sizeof(p));
Number_Input("项目小组编号", &(p.group_number));
q = PROJ_Query(p.group_number );
if(q == 0) {
fprintf(stderr, "没有关于该小组的信息。 ");
return ;
}
q--;
f = fopen(fileProjects, "rb+");
fsetpos(f, &q);
memset(&p, 0, sizeof(p));
fwrite(&p, sizeof(p), 1, f);
fclose(f);
printf("该小组信息已删除! ");
}
int PROJ_Invalid(int assignment)
{
struct TProject p; int sum = 0; int r = 0;
FILE * f = fopen(fileProjects, "rb");
if(!f) return 1;
while(!feof(f)) {
r = fread(&p, sizeof(p), 1, f);
if(r < 1) break;
if(p.group_number == 0) continue;
if(p.assignment == assignment) sum++;
}
fclose(f);
return sum<5?0:1;
}
void PROJ_Select(void)
{
struct TProject p; fpos_t q = 0; FILE * f = 0; time_t t = 0;
memset(&p, 0, sizeof(p));
Number_Input("项目小组编号", &(p.group_number));
q = PROJ_Query(p.group_number );
if(q == 0) {
fprintf(stderr, "没有关于该小组的信息。 ");
return ;
}
q--;
f = fopen(fileProjects, "rb");
fsetpos(f, &q);
memset(&p, 0, sizeof(p));
fread(&p, sizeof(p), 1, f);
fclose(f);
p.assignment = ASSG_Choose();
if(p.assignment==0) {
fprintf(stderr, "错误的题目编号。请在题库中查证后重新选题 ");
return ;
}
if(PROJ_Invalid(p.assignment)) {
fprintf(stderr, "已经有5个小组选择了该题目,请重新选题 ");
return ;
}
p.date_open = Date_Input("开题");
p.date_close= Date_Input("结题");
if(p.date_open > p.date_close) {
t = p.date_close ;
p.date_close = p.date_open;
p.date_open = t;
}
p.process = 0;
f = fopen(fileProjects, "rb+");
fsetpos(f, &q);
fwrite(&p, sizeof(p), 1, f);
fclose(f);
}
void PROJ_Progress(void)
{
struct TProject p; fpos_t q = 0; FILE * f = 0;
memset(&p, 0, sizeof(p));
Number_Input("项目小组编号", &(p.group_number));
q = PROJ_Query(p.group_number );
if(q == 0) {
fprintf(stderr, "没有关于该小组的信息。 ");
return ;
}
q--;
f = fopen(fileProjects, "rb");
if(!f) {
fprintf(stderr, "数据库无记录! ");
return ;
}
fsetpos(f, &q);
memset(&p, 0, sizeof(p));
fread(&p, sizeof(p), 1, f);
fclose(f);
if(p.assignment < 1) {
fprintf(stderr, "尚未选题,请选题后再补登进度 ");
return ;
}
Number_Input("进度(0~100)", &(p.process ));
if(p.process <0 || p.process > 100) {
fprintf(stderr, "错误的进度 ");
return ;
}
f = fopen(fileProjects, "rb+");
fsetpos(f, &q);
fwrite(&p, sizeof(p), 1, f);
fclose(f);
printf("进度已经登记完成! ");
}
void PROJ_Evaluate(void)
{
struct TProject p; fpos_t q = 0; FILE * f = 0;
memset(&p, 0, sizeof(p));
Number_Input("项目小组编号", &(p.group_number));
q = PROJ_Query(p.group_number );
if(q == 0) {
fprintf(stderr, "没有关于该小组的信息。 ");
return ;
}
q--;
f = fopen(fileProjects, "rb");
fsetpos(f, &q);
memset(&p, 0, sizeof(p));
fread(&p, sizeof(p), 1, f);
fclose(f);
if(p.assignment < 1) {
fprintf(stderr, "尚未选题,请选题后再进行评分 ");
return ;
}
Number_Input("评分(0~100)", &(p.score ));
if(p.score <0 || p.score > 100) {
fprintf(stderr, "错误的评分 ");
return ;
}
f = fopen(fileProjects, "rb+");
fsetpos(f, &q);
fwrite(&p, sizeof(p), 1, f);
fclose(f);
printf("成绩已经评定完成! ");
}
void PROJ_Menu(void)
{
int cmd = 0;
for(;;) {
printf("*****项目管理***** 0-查看 1-新增 2-删除 3-选题 4-登记进度 5-打分 任意键返回 ");
cmd = getch() - "0";
switch(cmd) {
case 0: PROJ_Report(); break;
case 1: PROJ_Append(); break;
case 2: PROJ_Delete(); break;
case 3: PROJ_Select(); break;
case 4: PROJ_Progress(); break;
case 5: PROJ_Evaluate(); break;
default: return ;
}
}
}
int main(void)
{
int cmd = 0;
for(;;) {
printf("*****欢迎使用学生实践管理软件***** 0-题目管理 1-项目管理 其他任意键退出 ");
cmd = getch() - "0";
switch(cmd) {
case 0: ASSG_Menu(); break;
case 1: PROJ_Menu(); break;
default: return 0;
}
}
return 0;
}
- 康康map
-
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
struct A
{
char xibie[30];
int banji;
char name[10];
int num;
int yuwen;
int shuxue;
int yingyu;
};
char menu()
{
char ch;
puts(" 欢迎使用学生成绩管理系统 ");
printf("录入学生详细信息..................1 ");
printf("浏览全部学生详细信息..............2 ");
printf("查看某个学生详细信息..............3 ");
printf("修改某个学生信息..................4 ");
printf("删除某个学生信息..................5 ");
printf("退出程序..........................6 ");
printf("请选择所要操作的对应数字 ");
while(1)
{scanf("%c",&ch);
/*ch=getchar();*/
/*getchar();*/
if(ch<"1"||ch>"6")
printf("选择有误请从新输入");
else break;
}
return ch;
}
void fun1()
{ int i=1;
char mn;
struct A stu;
FILE *fp;
if((fp=fopen("d:\学生信息库.txt","ab"))==NULL)
{
printf(" can not open file ");
getch();
exit(1);
}
do
{ printf("请输入第%d学生学号:",i); scanf("%d",&stu.num);getchar();
printf("请输入第%d学生姓名:",i); scanf("%s",stu.name); getchar();
printf("请输入第%d学生系别:",i); scanf("%s",stu.xibie); getchar();
printf("请输入第%d学生班级:",i); scanf("%d",&stu.banji); getchar();
printf("请输入第%d学生的语文成绩:",i); scanf("%d",&stu.yuwen); getchar();
printf("请输入第%d学生的数学成绩:",i); scanf("%d",&stu.shuxue); getchar();
printf("请输入第%d学生的英语成绩:",i); scanf("%d",&stu.yingyu); getchar();
/*printf(" %s %d %s %d %d %d %d ",stu.xibie,stu.banji,stu.name,stu.num,stu.yuwen,stu.shuxue,stu.yingyu);*/
fwrite(&stu,sizeof(stu),1,fp);
printf(" 是否继续录入(y/n)");
mn=getchar(); getch();
i++;
}
while(mn=="y"||mn=="Y");
fclose(fp);
}
void fun21()
{
printf("%s %s %s %s %s %s %s %s ","系别","班级","姓名","学号","语文","数学","英语","总分");
}
void fun22(struct A stu)
{
printf("%s %d %s %d %d %d %d %d ",stu.xibie,stu.banji,stu.name,stu.num,stu.yuwen,stu.shuxue,stu.yingyu,stu.yuwen+stu.shuxue+stu.yingyu);
}
void fun2()
{
struct A stu;
FILE *fp;
int zongshu=0;
if((fp=fopen("d:\学生信息库.txt","rb"))==NULL)
{
printf(" can not open file ");
getch();
exit(1);
}
while(fread(&stu,sizeof(stu),1,fp)==1)
{zongshu++;
if(zongshu==1)fun21();
fun22(stu);
}
fclose(fp);
getch();
}
void fun3() /*查看某个学生详细信息*/
{
struct A stu;
FILE *fp;
int chaxun;
int B=0;
char xm[10];
int xh;
char f;
if((fp=fopen("d:\学生信息库.txt","rb"))==NULL)
{
printf(" Can not open the file!");
getch();
exit(1);
}
rewind(fp);
do
{
printf("选择查找方式:(1:学号 2:姓名)");
while(1)
{
scanf("%d",&chaxun);
if(chaxun<1||chaxun>2)
printf("输入错误,请重新输入:(1:学号 2:姓名)");
else break;
}
if(chaxun==1)
{
printf("请输入一个你想查询学生的学号:");
scanf("%d",&xh);
B=0;
rewind(fp);
while(fread(&stu,sizeof(stu),1,fp)==1)
if(xh==stu.num)
{
B++;
if(B==1)
fun21();
fun22(stu);
}
}
else
{
printf("请输入一个你想查询学生的姓名:");
scanf("%s",&xm);
B=0;
while(fread(&stu,sizeof(stu),1,fp)==1)
{
if(strcmp(xm,stu.name)==0)
{
B++;
if(B==1) fun21();
fun22(stu);
}
}
}
printf("想继续查询吗?(y/n):");
f=getch();
getch();
}while(f=="Y"||f=="y");
fclose(fp);
}
void fun4() /* 修改某个学生信息*/
{
struct A stu;
FILE *fp1,*fp2;
int flag;
int ch;
char f;
do
{
if((fp1=fopen("d:\学生信息库.txt","rb"))==NULL)
{
printf(" can not open file ");
getch();
exit(1);
}
if((fp2=fopen("d:\temp.txt","wb"))==NULL)
{
printf(" can not open file ");
getch();
exit(1);
}
printf("请输入你想修改的学生的学号:");
scanf("%d",&ch);
flag=0;
while(fread(&stu,sizeof(stu),1,fp1)==1)
{
if(ch==stu.num)
{ fun21();
fun22(stu);
printf(" 请输入新的学生信息: ");
printf("请输入第%d学生学号:",ch); scanf("%d",&stu.num);getchar();
printf("请输入第%d学生姓名:",ch); scanf("%s",stu.name); getchar();
printf("请输入第%d学生系别:",ch); scanf("%s",stu.xibie); getchar();
printf("请输入第%d学生班级:",ch); scanf("%d",&stu.banji); getchar();
printf("请输入第%d学生的语文成绩:",ch); scanf("%d",&stu.yuwen); getchar();
printf("请输入第%d学生的数学成绩:",ch); scanf("%d",&stu.shuxue); getchar();
printf("请输入第%d学生的英语成绩:",ch); scanf("%d",&stu.yingyu); getchar();
flag=1;
/*fwrite(&stu,sizeof(stu),1,fp2);*/
/*break;*/
}
/* break;*/
fwrite(&stu,sizeof(stu),1,fp2);
}
fclose(fp1);
fclose(fp2);
if(flag==1)
{
printf("恭喜你! 信息修改成功");
remove("d:\学生信息库.txt");
rename("d:\temp.txt","d:\学生信息库.txt");
}
else
printf("输入有误,不能找的该学生!");
printf("是否继续查找?(y/n)");
f=getch();
getch();
}while(f=="y"||f=="Y");
// fclose();
/*menu();*/
}
void fun5() /*删除某个学生信息*/
{
struct A stu;
FILE *fp1,*fp2;
int C=0;
int ch;
char f;
// rewind(fp);
do
{
if((fp1=fopen("d:\学生信息库.txt","rb"))==NULL)
{
printf(" Can not open the file!");
getch();
exit(1);
}
if((fp2=fopen("d:\temp.txt","wb"))==NULL)
{
printf(" Can not creat the temp file!");
getch();
exit(1);
}
printf("请输入你想删除学生的学号:");
scanf("%d",&ch);
C=0;
/*if(ch!=stu.num)
printf("学生信息库里没有该学生,请重新输入:");
else*/
//{
/*while(fread(&stu,sizeof(stu),1,fp1)==1)
{
if(ch==stu.num)
{
fun21();
fun22(stu);
C=1;
break;
}
else
fwrite(&stu,sizeof(stu),1,fp2);
}*/
//fwrite(&stu,sizeof(stu),1,fp2);
while(fread(&stu,sizeof(stu),1,fp1)==1)
{
if(ch!=stu.num)
fwrite(&stu,sizeof(stu),1,fp2);
C=1;
//else;
/*if(ch==stu.num)
{fun21();
fun22(stu);}*/
}
fclose(fp1);
fclose(fp2);
if(C==1)
{
printf("删除成功! ");
remove("d:\学生信息库.txt");
rename("d:\temp.txt","d:\学生信息库.txt");
}
else
printf("Can not find this record! ");
printf("想继续删除吗?(y/n):");
f=getch();
getch();
}while(f=="Y"||f=="y");
}
main()
{int p;
do{
printf("请输入密码");
scanf("%d",&p);
if(p==123)
{
while(1)
switch(menu())
{
case "1":fun1();break;
case "2":fun2();break;
case "3":fun3();break;
case "4":fun4();break;
case "5":fun5(); break;
case "6":exit(1);break;
}
}
printf("密码有误,请从新输入");
}while(1);
}
<PIXTEL_MMI_EBOOK_2005>2 </PIXTEL_MMI_EBOOK_2005>