编制一个C语言成绩记录簿
我花了一天时间写的,自己也学了下文件,感觉还不错,界面什么都比较友好了,提示也很多。如果网页显示代码不是很好的话发个邮箱给我,我把txt文件发给你,里面已经加入了写入文件功能和读取文件功能,开入主界面就可以看见多了两个功能,全部功能都是写在函数里的,你自己要改应该也很方便的,我自己检查过了,可用,代码如下:
#include
#include
#include
#define MAX 1000
typedef struct Lesson //定义课程结构体
{
int Lesson_Num;
char Lesson_Name[50];
int Lesson_Mark;
int Lesson_Credit;
}Lesson;
typedef struct Student //定义学生的结构体
{
char Name[50];
int Num;
int Lesson_Count;
Lesson L[20];
}Student;
Student S[MAX];
static int Student_Count = 0; //记录学生数的变量
void PrintInterface(); //打印界面
int AddStudent(); //添加,带返回值,提示操作成功
int DelStudent(); //删除,带返回值,提示操作成功
void CheckStudent(); //查学生成绩
void CheckClass(); //查班成绩表
void WriteFile(); //写入文本文件
void ReadFile(); //读取文本文件
void main()
{
int Choice;
while (1)
{
PrintInterface();
scanf("%d%*c", &Choice); //"%*c"是吸收回车的,因为后面会输入字母类型
if (Choice >= 0 && Choice <= 6) //选择操作合法
{
switch (Choice)
{
case 0: exit(1);
case 1:
{
system("cls");
if (AddStudent()) printf("
添加成功...回车继续
");
else printf("
添加失败...回车继续
");
getchar();
getchar();
system("cls");
break;
}
case 2:
{
system("cls");
if (DelStudent()) printf("
删除成功...回车继续
");
else printf("
删除失败...回车继续
");
getchar();
getchar();
system("cls");
break;
}
case 3:
{
system("cls");
CheckStudent();
system("cls");
break;
}
case 4:
{
system("cls");
CheckClass();
system("cls");
break;
}
case 5: WriteFile();system("cls");break;
case 6: ReadFile();system("cls");break;
default:;
}
}
else
{
printf("无此功能..重新选择..回车确定
"); //选择操作非法
getchar();
system("cls"); //清屏函数
}
}
}
void PrintInterface()
{
printf(" --------------------------
");
printf("| 1、添加 |
");
printf("| |
");
printf("| 2、删除 |
");
printf("| |
");
printf("| 3、查学生成绩 |
");
printf("| |
");
printf("| 4、查班成绩表 |
");
printf("| |
");
printf("| 5、写入文本文件 |
");
printf("| |
");
printf("| 6、读取文本文件 |
");
printf("| |
");
printf("| 0、退出 |
");
printf(" --------------------------
");
printf("选择操作:");
}
int AddStudent()
{
int S_count, i, j;
printf("
添加中......
");
printf("
添加学生人数(如1、2 ……999):");
scanf("%d", &S_count);
if (Student_Count + S_count >= MAX) return 0; //超过了数组上限
for (i = Student_Count; i < Student_Count + S_count; i++)
{
printf("
第%d个学生:
", i - Student_Count + 1);
printf("
学生学号:"); scanf("%d%*c", &S[i].Num);
printf("
学生姓名:"); gets(S[i].Name);
printf("
该学生所修课程数:"); scanf("%d", &S[i].Lesson_Count);
for (j = 0; j < S[i].Lesson_Count; j++)
{
printf("
第%d门课:
", j + 1);
printf("
课程编号:"); scanf("%d%*c", &S[i].L[j].Lesson_Num);
printf("
课程名称:"); gets(S[i].L[j].Lesson_Name);
printf("
课程成绩:"); scanf("%d", &S[i].L[j].Lesson_Mark);
printf("
课程学分:"); scanf("%d", &S[i].L[j].Lesson_Credit);
if (S[i].L[j].Lesson_Mark < 60) S[i].L[j].Lesson_Credit = 0; //不及格的课程学分为0
}
}
Student_Count += S_count;
return 1;
}
int DelStudent()
{
char *D_Name;
int D_Num;
int i, j;
printf("
填写待删除学生的信息:
");
printf("
学生姓名:"); gets(D_Name);
printf("
学生学号:"); scanf("%d", &D_Num);
for (i = 0; i < Student_Count; i++)
{
if (!strcmp(S[i].Name, D_Name) && S[i].Num == D_Num)
{
printf("
找到该学生,删除中......
");
for (j = i + 1; j < Student_Count; j++)
{
S[j - 1] = S[j];
}
break;
}
}
if (i == Student_Count)
{
printf("
未找到该学生...请核对所填信息
");
return 0;
}
else
{
Student_Count--;
return 1;
}
}
void CheckStudent()
{
int C_Choice;
char C_Name[50];
int C_Num;
int i, j;
printf("
输入所查学生信息(1.姓名 \\ 2.学号)选择:");
scanf("%d%*c", &C_Choice);
printf("
查找中......
");
if (C_Choice == 1 || C_Choice == 2) //选择合法
{
if (C_Choice == 1)
{
printf("
姓名:"); gets(C_Name);
for (i = 0; i < Student_Count; i++) //全部穷举,防止同名同姓
{
if (!strcmp(S[i].Name, C_Name))
{
printf("
学号:%d姓名:%s
", S[i].Num, S[i].Name);
printf("
课程编号课程名称课程成绩课程学分
");
printf("-----------------------------------------------------
");
for (j = 0; j < S[i].Lesson_Count; j++)
{
printf("%d%s%d%d
", S[i].L[j].Lesson_Num,
S[i].L[j].Lesson_Name, S[i].L[j].Lesson_Mark,
S[i].L[j].Lesson_Credit);
printf("-----------------------------------------------------
");
}
printf("
");
}
}
}
else
{
printf("
学号:"); scanf("%d%*c", &C_Num);
for (i = 0; i < Student_Count; i++) //不用全部穷举,学号唯一
{
if (S[i].Num == C_Num)
{
printf("
学号:%d姓名:%s
", S[i].Num, S[i].Name);
printf("
课程编号课程名称课程成绩课程学分
");
printf("-----------------------------------------------------
");
for (j = 0; j < S[i].Lesson_Count; j++)
{
printf("%d%s%d%d
", S[i].L[j].Lesson_Num,
S[i].L[j].Lesson_Name, S[i].L[j].Lesson_Mark,
S[i].L[j].Lesson_Credit);
printf("-----------------------------------------------------
");
}
printf("
");
break;
}
}
}
printf("查找完毕...回车继续
");
getchar();
}
else //选择不合法
{
printf("选择错误...回车继续
");
getchar();
return;
}
}
void CheckClass()
{
int C_LNum;
double SSNum = 0, PassSNum = 0, SMark = 0;
int i, j;
printf("
请输入课程编号:");
scanf("%d%*c", &C_LNum);
printf("
查找中......
");
printf("学号姓名课程名称课程成绩课程学分
");
printf("----------------------------------------------------
");
for (i = 0; i < Student_Count; i++)
{
for (j = 0; j < S[i].Lesson_Count; j++)
{
if (S[i].L[j].Lesson_Num == C_LNum)
{
printf("%d%s%s%d%d
", S[i].Num, S[i].Name, S[i].L[j].Lesson_Name,
S[i].L[j].Lesson_Mark, S[i].L[j].Lesson_Credit);
printf("----------------------------------------------------
");
SMark += S[i].L[j].Lesson_Mark;
SSNum ++;
if (S[i].L[j].Lesson_Mark >= 60) PassSNum++;
break;
}
}
}
printf("
平均分:%.2lf及格率:%.2lf%%
", SMark / SSNum, PassSNum / SSNum * 100);
printf("
查找完毕...回车继续
");
getchar();
}
void WriteFile()
{
FILE *fp;
int i, j;
char Adr[100];
printf("
请输入写入的文件地址:
地址输入格式:例如d:\\\\Student.txt(\\\\为转义字符):");
scanf("%s%*c", Adr);
printf("
写入中......
");
if (fp = fopen(Adr,"w")) //写入文件
{
fprintf(fp,"%d
",Student_Count);
for (i = 0; i < Student_Count; i++)
{
fprintf(fp,"%d%s%d
",S[i].Num, S[i].Name,S[i].Lesson_Count);
for (j = 0; j < S[i].Lesson_Count; j++)
{
fprintf(fp,"%d%s%d%d
", S[i].L[j].Lesson_Num,
S[i].L[j].Lesson_Name,S[i].L[j].Lesson_Mark,
S[i].L[j].Lesson_Credit);
}
}
printf("
写入完成...回车继续
");
fclose(fp);
}
else
{
printf("
写入失败...回车继续
");
}
getchar();
}
void ReadFile()
{
FILE *fp;
int i, j;
char Adr[100];
printf("
请输入读取(为防止读入错误,希望与写入文件内容格式一致)的文件地址:
地址输入格式:例如d:\\\\Student.txt(\\\\为转义字符):");
scanf("%s%*c", Adr);
printf("
读取中......
");
if (fp = fopen(Adr,"r"))
{
fscanf(fp,"%d",&Student_Count);
for (i = 0; i < Student_Count; i++)
{
fscanf(fp,"%d%s%d",&S[i].Num, &S[i].Name,&S[i].Lesson_Count);
for (j = 0; j < S[i].Lesson_Count; j++)
{
fscanf(fp,"%d%s%d%d",&S[i].L[j].Lesson_Num,
&S[i].L[j].Lesson_Name,&S[i].L[j].Lesson_Mark,
&S[i].L[j].Lesson_Credit);
}
}
printf("
读取成功...回车继续
");
fclose(fp);
}
else
{
printf("
读取失败...回车继续
");
}
getchar();
}
#include #include #include #define MAX 1000typedef struct Lesson //定义课程结构体{ int Lesson_Num; char Lesson_Name[50]; int Lesson_Mark; int Lesson_Credit;}Lesson;typedef struct Student //定义学生的结构体{ char Name[50]; int Num; int Lesson_Count; Lesson L[20];}Student;Student S[MAX];static int Student_Count = 0; //记录学生数的变量void PrintInterface(); //打印界面int AddStudent(); //添加,带返回值,提示操作成功int DelStudent(); //删除,带返回值,提示操作成功void CheckStudent(); //查学生成绩void CheckClass(); //查班成绩表void WriteFile(); //写入文本文件void ReadFile(); //读取文本文件void main(){ int Choice; while (1) { PrintInterface(); scanf("%d%*c", &Choice); //"%*c"是吸收回车的,因为后面会输入字母类型 if (Choice >= 0 && Choice = MAX) return 0; //超过了数组上限 for (i = Student_Count; i = 60) PassSNum++; break; } } } printf("
平均分:%.2lf及格率:%.2lf%%
", SMark / SSNum, PassSNum / SSNum * 100); printf("
查找完毕...回车继续
"); getchar();}void WriteFile(){ FILE *fp; int i, j; char Adr[100]; printf("
请输入写入的文件地址:
地址输入格式:例如d:\\\\Student.txt(\\\\为转义字符):"); scanf("%s%*c", Adr); printf("
写入中......
"); if (fp = fopen(Adr,"w")) //写入文件 { fprintf(fp,"%d
",Student_Count); for (i = 0; i < Student_Count; i++) { fprintf(fp,"%d%s%d
",S[i].Num, S[i].Name,S[i].Lesson_Count); for (j = 0; j < S[i].Lesson_Count; j++) { fprintf(fp,"%d%s%d%d
", S[i].L[j].Lesson_Num, S[i].L[j].Lesson_Name,S[i].L[j].Lesson_Mark, S[i].L[j].Lesson_Credit); } } printf("
写入完成...回车继续
"); fclose(fp); } else { printf("
写入失败...回车继续
"); } getchar();}void ReadFile(){ FILE *fp; int i, j; char Adr[100]; printf("
请输入读取(为防止读入错误,希望与写入文件内容格式一致)的文件地址:
地址输入格式:例如d:\\\\Student.txt(\\\\为转义字符):"); scanf("%s%*c", Adr); printf("
读取中......
"); if (fp = fopen(Adr,"r")) { fscanf(fp,"%d",&Student_Count); for (i = 0; i < Student_Count; i++) { fscanf(fp,"%d%s%d",&S[i].Num, &S[i].Name,&S[i].Lesson_Count); for (j = 0; j < S[i].Lesson_Count; j++) { fscanf(fp,"%d%s%d%d",&S[i].L[j].Lesson_Num, &S[i].L[j].Lesson_Name,&S[i].L[j].Lesson_Mark, &S[i].L[j].Lesson_Credit); } } printf("
读取成功...回车继续
"); fclose(fp); } else { printf("
读取失败...回车继续
"); } getchar();}
成绩记录簿中记录以下数据:学号、姓名、课程编号、课程名称、成绩、学分,所有成绩都以百分制计分。在程序中可以输入新的成绩记录,可以按学号或姓名查询一个学生的所有成绩,和已完成的总学分。也可以按课程编号查出一个班的成绩表,班成绩表后面要统计平均分,和及格率。
2. 提高水平
在程序中增加将数据写入文本文件和从文件中读入数据的功能,文件名由用户输入。
3. 提示
在没有使用文件时,数据可以保存在一个大的数组中,要注意的数据项的类型。
知识范围;C程序设计第三版谭浩强
1、用C语言编写一个程序计算自己的期末考试成绩的总分。(要求各科成 ...
include<stdio.h> int main(){ int n,i,s=0,x;printf("考了几门功课?\\n");scanf("%d",&n);printf("请输入%d门功课的成绩: \\n");for(i=0; i<n; i++){ scanf("%d",&x);s+=x;} printf("总分是:%d\\n",s);return 0;} ...
用c语言设计一个程序统计一个班的学生成绩?
while (1) { printf("请输入学生学号:");scanf_s("%d", &id);if (id == -1) { break; } printf("请输入学生成绩:");scanf_s("%lf", &score);Student[len].id = id;Student[len].score = score;len++;} printf("信息导入完毕!\\n");} int main() { input();printf("全...
用C语言设计一个学生成绩统计程序,
sqrt(1.0);\/*不知你用什么编译器,如果TC的话,有个BUG。就是结构体里有float型的话,要加这句,不然会报错*\/ Input(stu);count(stu);find(stu);\/*为什么你的程序里没有执行着几个函数咧?*\/ } void Input(struct student stu[]){ int i,j;printf("Enter No.and score as :score1 ...
如何用c语言编一个成绩查询系统?
如果你是要做一个非常专业的商业软件,这个其实不太适合用C语言来编写。你可以考虑其他高级语言如java,c#,etc.如果你仅仅是想在功能上实现成绩查询,而且数据量不是那种特别大,比如千万,上亿级别的,用C语言以二进制文件读写的方式完全可以轻松实现。下面说说大概的思路:1.你可以定义一个结构体来描述...
用C语言编辑一个学生成绩管理系统
printf("\\t\\t\\t\\t1.输入学生成绩\\n");printf("\\t\\t\\t\\t2.按总分排榜\\n");printf("\\t\\t\\t\\t3.查找学生信息\\n");printf("\\t\\t\\t\\t4.退出\\n\\n");printf("\\t\\t\\t请输入功能选择编号(1-4):");fflush(stdin); \/*清空输入缓冲区*\/ scanf("%c",&selmenu); \/*接受...
C语言编写单科学生成绩
include "stdio.h"#define N 16int main(int argv,char *argc[]){int s[N],i,d[5],sum;printf("Please enter %d students' score(int, Separated by ' ')...\\n",N);for(sum=d[0]=d[1]=d[2]=d[3]=d[4]=i=0;i<N;i++){while(scanf("%d",s+i)!=1 || s[i]<0...
设计一个统计班级学生成绩的c语言程序
sum;\/\/总分double avr;\/\/平均分}stu[N];void input(int n){int i;for(i=0;i<n;i++){int sum=0;double avr=0.0;printf("请输入第%d个学生信息\\n",i+1);printf("请输入学号:");scanf("%d",&stu[i].num);printf("请输入姓名:");scanf("%s",stu[i].name);...
用C语言设计一个学生成绩管理系统
include <stdio.h>#include <string.h> include <stdlib.h>#define MAX 1000\/*定义学生成绩信息结构*\/struct stu{ char id[8];char name[8];
求以下c语言编程:一个简单的学生成绩管理系统。其中每个学生信息包括学 ...
一个简单的学生成绩管理系统。其中每个学生信息包括学号、姓名、数学成绩、英语成绩、计算机成绩。编写一个菜单程序分别完成以下功能:每个学生的信息使用结构体变量存储。编写函数f... 一个简单的学生成绩管理系统。其中每个学生信息包括学号、姓名、数学成绩、英语成绩、计算机成绩。编写一个菜单程序分别完成以下功能:每个...
请帮忙用C语言制作一个简易的成绩管理系统,感谢大家
从文件读取信息 { printf("Reading student information:\\n"); stu *p=NULL; \/\/ 指针,指向个待插入的结点 stu *q=NULL; \/\/ 指针,用于在其后插入结点 head = NULL; \/\/ 一开始链表为空 FILE * r =fopen("input.dat","r"); p = (stu*)malloc(sizeof(stu...
尔霍小儿: 设计要求: 成绩记录簿中记录以下数据:学号、姓名、课程编号、课程名称、成绩、学分,所有成绩都以百分制计分.在程序中可以输入新的成绩记录,可以按学号或姓名查询一个学生的所有成绩,和已完成的总学分.也可以按课程编号查出一个班的成绩表,班成绩表后面要统计平均分,和及格率. 2. 提高水平 在程序中增加将数据写入文本文件和从文件中读入数据的功能,文件名由用户输入. 3. 提示 在没有使用文件时,数据可以保存在一个大的数组中,要注意的数据项的类型. 知识范围;C程序设计第三版谭浩强
青山湖区19649391167: c语言编程《成绩记录簿》?
尔霍小儿: #include "stdio.h" #include "stdlib.h" #include "string.h" int shoudsave=0; // struct student { char num[10];//学号 char name[20]; int cgrade; char neartime[10];//最近更新时间 }; typedef struct node { struct student data; struct node *next; }...
青山湖区19649391167: 用C语言编一个成绩记录簿 - ?
尔霍小儿: #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 1000 typedef struct Lesson //定义课程结构体 { int Lesson_Num; char Lesson_Name[50]; int Lesson_Mark; int Lesson_Credit; }Lesson; typedef struct Student //定义学生的结构...
青山湖区19649391167: 用C语言设计一个学生成绩记录薄?
尔霍小儿: #include <stdio.h>#include <stdlib.h>#include <string.h> struct student{ char name[60]; char ID[7]; int score;}; int dq(struct student st[]);void xianshi();void bc(struct student st[]);void add(); void select();void zz();void chazhao();void xhcz();void xmcz();...
青山湖区19649391167: 编制一个C语言成绩记录簿,要求每个学生信息包括:学号、姓名、C语言成绩.具体功能: (1)创建信息 - ?
尔霍小儿: #include #include #include #include #include using namespace std; struct xueshengguanli { string name; string xibie; string banbie; string sex; int num; float zongheCJ; xueshengguanli *next; }; typedef xueshengguanli* xueshengGL; xueshengGL ...
青山湖区19649391167: 编制一个c语言成绩记录簿,每个学生信息包括:学号,姓名,c语言成绩. - ?
尔霍小儿: /*students.c*/ #include <stdio.h> #include <string.h> #include <stdlib.h> #include "students.h"struct list //结构体 {int sno;char sname[2];int sage;char sprof[2];int sclass;struct list *next; }; stud *Create(int n) {stud *p,*c,*h;p=(stud *) malloc (...
青山湖区19649391167: 成绩记录薄的程序怎么写?? 编制一个C语言成绩记录薄,每个学生信息包括:学号、姓名、C语言成绩.具体功能:⑴创建信息链表并以磁盘文件保存;⑵读取磁盘文件并显示输出所有学生的成绩;⑶按学号或姓 - ?
尔霍小儿: /******头文件(.h)***********/ #include "stdio.h" /*I/O函数*/ #include "stdlib.h" /*其它说明*/ #include "string.h" /*字符串函数*/ #include "conio.h" /*屏幕操作函数*/ #include "mem.h" /*内存操作函数*/ #include "ctype.h" /*字符操作函数*...
青山湖区19649391167: C语言编一个成绩记录簿 - ?
尔霍小儿: 我花了一天时间写的,自己也学了下文件,感觉还不错,界面什么都比较友好了,提示也很多.如果网页显示代码不是很好的话发个邮箱给我,我把txt文件发给你,里面已经加入了写入文件功能和读取文件功能,开入主界面就可以看见多了两个...
青山湖区19649391167: 用c语言怎样编写学生成绩表 - ?
尔霍小儿: #include #define N 2 //N定义为学生数 struct student { char number[20]; char name[20]; float f[4]; float total; }student[N]; void main() { int i, j; char temp[20]; printf("输入学生信息\n"); for( i = 0; i < N; i++) { student[i].total = 0; printf("输入学生姓...