c学生成绩管理系统课程设计报告
Ⅰ 学生成绩管理系统c语言实验报告
这个学生成绩管理系统实现了哪些功能
有程序吗 有的话 发给我 我按程序写报告
如果没有我就先写程序
look my name and jia me
Ⅱ C语言课程设计 学生信息管理系统 报告
在网络输入"学生信息管理系统",可以参考一下
请采纳答案,支持我一下。
Ⅲ C语言课程设计报告(题目:学生成绩管理系统)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 35
char name;
int inth;
struct date
{
int year;
char month;
char day;
};
struct student
{
char no[9];
char name[9];
char sex[3];
struct date birthday;
int score[4];
};
int menu()
{
int code;
printf(" 菜单\n");
printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
printf("┃ 0.退出 ┃\n");
printf("┃ 1.显示学生信息 ┃\n");
printf("┃ 2.显示按姓名排序后的学生信息 ┃\n");
printf("┃ 3.显示按总分排序后的学生信息 ┃\n");
printf("┃ 4.按学号查学生分数和平均分数 ┃\n");
printf("┃ 5.按姓名查学生分数和平均分数 ┃\n");
printf("┃ 6.查各课程平均分数 ┃\n");
printf("┃ 7.查男女学生的人数 ┃\n");
printf("┃ 8.显示学生信息表 ┃\n");
printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("选择代码(0,1,2,3,4,5,6,7,8): ");
scanf("%d",&code);
return code;
}
/* 建立学生信息数组 */
void readsi(struct student stud[],int *n)
{
FILE*fp;
int i;
if((fp=fopen("studf.txt","r"))==NULL)
{
printf("不能打开studf.txt文件!\n");
exit(1);
}
for(i=0;!feof(fp);i++)
{
(*n)++;
if(*n>N)
{
printf("最多处理35位学生信息!\n");
return;
}
fscanf(fp,"%s %s %s %d %d %d %d %d %d",stud[i].no,stud[i].name,stud[i].sex,&stud[i].birthday.year,&stud[i].birthday.month,&stud[i].birthday.day,&stud[i].score[0],&stud[i].score[1],&stud[i].score[2]);
// fscanf从一个流中执行格式化输入
stud[i].score[3]=stud[i].score[0]+stud[i].score[1]+stud[i].score[2];
}
fclose(fp);
}
/* 显示学生信息 */
void printsi(struct student *pstud,int n)
{
int i,k=0;
printf(" 学号 姓名 性别 年 月 日 数学 英语 C 总分\n");
printf("┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉\n");
printf("==================================================================\n");
for(i=0;i<n;i++)
{
printf("%-8s %-8s %-2s %4d %2d %2d %4d %4d %4d %5d\n",pstud[i].no,pstud[i].name,pstud[i].sex,pstud[i].birthday.year,pstud[i].birthday.month,pstud[i].birthday.day,
pstud[i].score[0],pstud[i].score[1],pstud[i].score[2],pstud[i].score[3]);
k++;
if(k%20==0)
scanf("%*c");
}
}
/* 按学号排序—简单比较排序法*/
void csort_no(struct student *pstud,int n)
{
struct student temp;
int i,j;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(strcmp(pstud[i].no,pstud[j].no)>0)
{
temp=pstud[i];
pstud[i]=pstud[j];
pstud[j]=temp;
}
}
/* 显示学生信息表*/
void printtable(struct student *pstud,int n)
{
int i,k=0;struct student studA[N];
for(i=0;i<n;i++)
studA[i]=pstud[i];
csort_no(studA,n);
printf("\n\n");
printf(" 学生信息表\n");
printf(" ==================\n\n");
printf("┏━━━━┳━━━━┳━━━┳━━━━━━┳━━━┳━━━┳━━━┳━━━┓\n");
printf("┃学号 ┃姓名 ┃ 性别 ┃ 年 月 日 ┃ 数学 ┃ 英语 ┃ C ┃ 总分 ┃\n");
printf("┣━━━━╋━━━━╋━━━╋━━━━━━╋━━━╋━━━╋━━━╋━━━┫\n");
printf("┣━━━━╋━━━━╋━━━╋━━━━━━╋━━━╋━━━╋━━━╋━━━┫\n");
for(i=0;i<n;i++)
{
printf("┃%-8s┃%-8s┃ %-2s ┃ %4d %2d %2d ┃ %4d ┃ %4d ┃ %4d ┃ %4d ┃\n",studA[i].no,studA[i].name,studA[i].sex,studA[i].birthday.year,studA[i].birthday.month,studA[i].birthday.day,studA[i].score[0],studA[i].score[1],studA[i].score[2],studA[i].score[3]);
if(i==n-1)
printf("┗━━━━┻━━━━┻━━━┻━━━━━━┻━━━┻━━━┻━━━┻━━━┛\n");
else
printf("┣━━━━╋━━━━╋━━━╋━━━━━━╋━━━╋━━━╋━━━╋━━━┫\n");
k++;
if(k%20==0)
scanf("%*c");
}
}
/* 查各课程平均分数 */
void find_ave(struct student *pstud,int n)
{
static summath=0,sumenglish=0,sumC=0,score=0;int i;struct student studA[N];
for(i=0;i<n;i++)
studA[i]=pstud[i];
csort_no(studA,n);
printf(" 各课程平均分数 \n ");
printf("————————————————————————————\n");
for(i=0;i<n;i++)
{
summath=summath+pstud[i].score[0];
sumenglish=sumenglish+pstud[i].score[1];
sumC=sumC+pstud[i].score[2];
score=score+pstud[i].score[3];
}
printf("数学平均分数:%4d\n",summath/n);
printf("英语平均分数:%4d\n",sumenglish/n);
printf("c平均分数:%4d\n",sumC/n);
printf("总分平均分数:%5d\n",score/n);
}
/* 查男女学生人数 */
void find_pnum(struct student *pstud,int n)
{
int i,j=0,k=0;
for(i=0;i<n;i++)
{
if(strcmp(pstud[i].sex,"男")==0)
j++;
else
k++;
}
printf("男学生人数为%d人",j);
printf("女学生人数为%d人",k);
}
/* 按总分递减选择排序(应用指针数组)*/
void ssort(struct student *ptscore[],int n)
{
struct student *temp;
int i,j;
for(i=0;i<n-1;i++)
for(j=0;j<n-i-1;j++)
if(ptscore[j]->score[3]<ptscore[j+1]->score[3])
{
temp=ptscore[j];
ptscore[j]=ptscore[j+1];
ptscore[j+1]=temp;
}
}
/* 按学号查学生信息和平均分数(顺序查找)*/
void ssrch_no(struct student *pstud[],int n)
{
int i=0,j=0;char no[9];
printf("请输入要查找的学生学号:");
scanf("%s",&no);
printf("\n");
for(i=0;i<n;i++)
{
if(strcmp(no,pstud[i]->no)==0)
printf("已找到学号为%-8s的学生\n学号:%-8s\n姓名:%-8s\n性别:%-2s\n%4d年%2d月%2d日\n数学:%4d\n英语:%4d\nc:%4d\n总分%4d\n平均分数为:%4d\n",pstud[i]->no,pstud[i]->no,pstud[i]->name,pstud[i]->sex,pstud[i]->birthday.year,pstud[i]->birthday.month,pstud[i]->birthday.day,pstud[i]->score[0],pstud[i]->score[1],pstud[i]->score[2],pstud[i]->score[3],pstud[i]->score[3]/3);
else
j++;
}
if(j==6)
printf("未找到学号为%-8s的学生\n",no);
}
/* 按姓名查找的学生信息和平均分数(折半查找)*/
void bsrch_name(struct student *pname[],int n)
{
int bsrch(struct student *pname[],int n,char *name);
char name[9];int i;
printf("请输入要查找的学生姓名:");
scanf("%s",name);
i=bsrch(pname,n,name);
if(i!=-1)
printf("已找到该学生,学生信息:%-8s %-8s %-2s %4d %2d %2d %4d %4d %4d %5d\n",
pname[i]->no,pname[i]->name,pname[i]->sex,
pname[i]->birthday.year,pname[i]->birthday.month,
pname[i]->birthday.day,
pname[i]->score[0],pname[i]->score[1],pname[i]->score[2],
pname[i]->score[3]);
else
printf("%d没有找到该学生资料!\n",name);
for(;;)
{ i=i-1;
if(strcmp(name,pname[i]->name)==0) printf("已找到该学生,学生信息:%-8s %-8s %-2s %4d %2d %2d %4d %4d %4d %5d\n",
pname[i]->no,pname[i]->name,pname[i]->sex,
pname[i]->birthday.year,pname[i]->birthday.month,
pname[i]->birthday.day,
pname[i]->score[0],pname[i]->score[1],pname[i]->score[2],
pname[i]->score[3]);
else
break;
}
i=bsrch(pname,n,name);
for(;;)
{i=i+1;
if(strcmp(name,pname[i]->name)==0) printf("已找到该学生,学生信息:%-8s %-8s %-2s %4d %2d %2d %4d %4d %4d %5d\n",
pname[i]->no,pname[i]->name,pname[i]->sex,
pname[i]->birthday.year,pname[i]->birthday.month,
pname[i]->birthday.day,
pname[i]->score[0],pname[i]->score[1],pname[i]->score[2],
pname[i]->score[3]);
else
break;
}
}
int bsrch(struct student *pname[],int n,char *name)
{
int lower=0,upper=n-1,mid;
if(strcmp(name,pname[lower]->name)==0) return lower;
else if(strcmp(name,pname[upper]->name)==0) return upper;
else
while(lower<=upper)
{
mid=(lower+upper)/2;
if(strcmp(name,pname[mid]->name)==0)
return mid;
else if(strcmp(name,pname[mid]->name)>0)
lower=mid+1;
else
upper=mid-1;
}
return -1;
}
/* 按姓名递增冒泡排序(应用指针数组) */
void bsort(struct student *pname[],int n)
{
struct student *temp;
int i,j;
for(i=0;i<n-1;i++)
for(j=0;j<n-i-1;j++)
if(strcmp(pname[j]->name,pname[j+1]->name)>0)
{
temp=pname[j];
pname[j]=pname[j+1];
pname[j+1]=temp;
}
}
/* 按总分名次查找的学生信息和平均分数 */
void printf_ptscore(struct student *ptscore[],int n,int inth)
{
printf("请输入要查找总分名次:");
scanf("%d",&inth);
inth--;
if(inth>n)
{
printf("未找到总分名次为%5d的学生",inth);
}
else
printf("已找到总分名次为%5d的学生\n学号:%-8s\n姓名:%-8s\n性别:%-2s\n%4d年%2d月%2d日\n数学:%4d\n英语:%4d\nc:%4d\n总分%5d\n平均分数为:%4d",inth+1,ptscore[inth]->no,ptscore[inth]->name,ptscore[inth]->sex,ptscore[inth]->birthday.year,ptscore[inth]->birthday.month,ptscore[inth]->birthday.day,ptscore[inth]->score[0],ptscore[inth]->score[1],ptscore[inth]->score[2],ptscore[inth]->score[3],ptscore[inth]->score[3]/3);
}
/*显示姓名排序后的学生信息*/
void printsi_p1(struct student *parray[],int n)
{
int i,k=0;
printf(" 按姓名排序后的学生信息\n\n");
printf("学号 姓名 性别 年 月 日 数学 英语 C 总分\n");
printf("******** ------ ** ---- ** -- *** --- *** --- \n");
printf("=====================================================\n");
for(i=0;i<n;i++)
{
printf("%-8s%-8s%-2s%4d %2d %2d %4d %4d %4d %5d\n",
parray[i]->no,parray[i]->name,parray[i]->sex,
parray[i]->birthday.year,parray[i]->birthday.month,parray[i]->birthday.day,
parray[i]->score[0],parray[i]->score[1],parray[i]->score[2],parray[i]->score[3]);
k++;
if(k%20==0)
scanf("%*c");
}
}
/* 显示按总分排序后的学生信息 */
void printsi_p2(struct student *ptscore[],int n)
{
int i,k=0;
printf("\n\n");
printf(" 按总分排序后的学生信息表\n");
printf(" ==================\n\n");
printf("┏━━━━┳━━━━┳━━━┳━━━━━━┳━━━┳━━━┳━━━┳━━━┓\n");
printf("┃学号 ┃姓名 ┃ 性别 ┃ 年 月 日 ┃ 数学 ┃ 英语 ┃ C ┃ 总分 ┃\n");
printf("┣━━━━╋━━━━╋━━━╋━━━━━━╋━━━╋━━━╋━━━╋━━━┫\n");
printf("┣━━━━╋━━━━╋━━━╋━━━━━━╋━━━╋━━━╋━━━╋━━━┫\n");
for(i=0;i<n;i++)
{
printf("┃%-8s┃%-8s┃ %-2s ┃ %4d %2d %2d ┃ %4d ┃ %4d ┃ %4d ┃ %4d ┃\n",ptscore[i]->no,ptscore[i]->name,ptscore[i]->sex,ptscore[i]->birthday.year,ptscore[i]->birthday.month,ptscore[i]->birthday.day,ptscore[i]->score[0],ptscore[i]->score[1],ptscore[i]->score[2],ptscore[i]->score[3]);
if(i==n-1)
printf("┗━━━━┻━━━━┻━━━┻━━━━━━┻━━━┻━━━┻━━━┻━━━┛\n");
else
printf("┣━━━━╋━━━━╋━━━╋━━━━━━╋━━━╋━━━╋━━━╋━━━┫\n");
k++;
if(k%20==0)
scanf("%*c");
}
}
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 35
void main()
{
static struct student stud[N];
struct student *pstud[N];
struct student *pname[N];
struct student *ptscore[N];
int code,inth=0;
int n=0,i;
readsi(stud,&n);
for(i=0;i<N;i++)
pstud[i]=&stud[i];
for(i=0;i<N;i++)
pname[i]=&stud[i];
for(i=0;i<N;i++)
ptscore[i]=&stud[i];
bsort(pname,n);
ssort(ptscore,n);
printf("\n 学生信息:\n");
printsi(stud,n);
printf("\n 按<Enter>,进入菜单:\n");
scanf("%*c");
while(1)
{
code=menu();
switch(code)
{
case 0: /* 退出 */
exit(1);
case 1: /* 显示学生信息 */
printsi(stud,n);
scanf("%*2c");break;
case 2: /* 显示按姓名排序后的学生信息 */
printsi_p1(pname,n);
scanf("%*2c");break;
case 3: /* 显示按总分排序后的学生信息 */
printsi_p2(ptscore,n);
scanf("%*2c");break;
case 4: /* 按学号查找学生信息和平均分数 */
ssrch_no(pstud,n);
scanf("%*2c");break;
case 5: /* 按姓名查找学生信息和平均分数 */
bsrch_name(pname,n);
scanf("%*2c");break;
case 6: /* 查各门课的平均分数 */
find_ave(stud,n);
scanf("%*2c");break;
case 7: /* 查男女人数 */
find_pnum(stud,n);
scanf("%*2c");break;
case 8: /* 显示学生信息表 */
printtable(stud,n);
scanf("%*2c");break;
}
}
}
Ⅳ 学生成绩管理系统 课程设计实习报告
学生成绩管理(c语言版)
/*11.3.2 源程序*/
/***********xuesheng.c***********/
/******头文件(.h)***********/
#include "stdio.h" /*I/O函数*/
#include "stdlib.h" /*其它说明*/
#include "string.h" /*字符串函数*/
#include "conio.h" /*屏幕操作函数*/
#include "mem.h" /*内存操作函数*/
#include "ctype.h" /*字符操作函数*/
#include "alloc.h" /*动态地址分配函数*/
#define N 3 /*定义常数*/
typedef struct z1 /*定义数据结构*/
{
char no[11];
char name[15];
int score[N];
float sum;
float average;
int order;
struct z1 *next;
}STUDENT;
/*以下是函数原型*/
STUDENT *init(); /*初始化函数*/
STUDENT *create(); /*创建链表*/
STUDENT *delete(STUDENT *h); /*删除记录*/
void print(STUDENT *h); /* 显示所有记录*/
void search(STUDENT *h); /*查找*/
void save(STUDENT *h); /*保存*/
STUDENT *load(); /*读入记录*/
void computer(STUDENT *h); /*计算总分和均分*/
STUDENT *insert(STUDENT *h); /*插入记录*/
void append(); /*追加记录*/
void (); /*复制文件*/
STUDENT *sort(STUDENT *h); /*排序*/
STUDENT *index(STUDENT *h); /*索引*/
void total(STUDENT *h); /*分类合计*/
int menu_select(); /*菜单函数*/
/******主函数开始*******/
main()
{
int i;
STUDENT *head; /*链表定义头指针*/
head=init(); /*初始化链表*/
clrscr(); /*清屏*/
for(;;) /*无限循环*/
{
switch(menu_select()) /*调用主菜单函数,返回值整数作开关语句的条件*/
{ /*值不同,执行的函数不同,break 不能省略*/
case 0:head=init();break; /*执行初始化*/
case 1:head=create();break; /*创建链表*/
case 2:head=delete(head);break; /*删除记录*/
case 3:print(head);break; /*显示全部记录*/
case 4:search(head);break; /*查找记录*/
case 5:save(head);break; /*保存文件*/
case 6:head=load(); break; /*读文件*/
case 7:computer(head);break; /*计算总分和均分*/
case 8:head=insert(head); break; /*插入记录*/
case 9:();break; /*复制文件*/
case 10:head=sort(head);break; /*排序*/
case 11:append();break; /*追加记录*/
case 12:head=index(head);break; /*索引*/
case 13:total(head);break; /*分类合计*/
case 14:exit(0); /*如菜单返回值为14程序结束*/
}
}
}
/*菜单函数,返回值为整数*/
menu_select()
{
char *menu[]={"***************MENU***************", /*定义菜单字符串数组*/
" 0. init list", /*初始化*/
" 1. Enter list", /*输入记录*/
" 2. Delete a record from list", /*从表中删除记录*/
" 3. print list ", /*显示单链表中所有记录*/
" 4. Search record on name", /*按照姓名查找记录*/
" 5. Save the file", /*将单链表中记录保存到文件中*/
" 6. Load the file", /*从文件中读入记录*/
" 7. compute the score", /*计算所有学生的总分和均分*/
" 8. insert record to list ", /*插入记录到表中*/
" 9. the file to new file", /*复制文件*/
" 10. sort to make new file", /*排序*/
" 11. append record to file", /*追加记录到文件中*/
" 12. index on nomber", /*索引*/
" 13. total on nomber", /*分类合计*/
" 14. Quit"}; /*退出*/
char s[3]; /*以字符形式保存选择号*/
int c,i; /*定义整形变量*/
gotoxy(1,25); /*移动光标*/
printf("press any key enter menu......\n"); /*压任一键进入主菜单*/
getch(); /*输入任一键*/
clrscr(); /*清屏幕*/
gotoxy(1,1); /*移动光标*/
textcolor(YELLOW); /*设置文本显示颜色为黄色*/
textbackground(BLUE); /*设置背景颜色为蓝色*/
gotoxy(10,2); /*移动光标*/
putch(0xc9); /*输出左上角边框┏*/
for(i=1;i<44;i++)
putch(0xcd); /*输出上边框水平线*/
putch(0xbb); /*输出右上角边框 ┓*/
for(i=3;i<20;i++)
{
gotoxy(10,i);putch(0xba); /*输出左垂直线*/
gotoxy(54,i);putch(0xba);
} /*输出右垂直线*/
gotoxy(10,20);putch(0xc8); /*输出左上角边框┗*/
for(i=1;i<44;i++)
putch(0xcd); /*输出下边框水平线*/
putch(0xbc); /*输出右下角边框┛*/
window(11,3,53,19); /* 制作显示菜单的窗口,大小根据菜单条数设计*/
clrscr(); /*清屏*/
for(i=0;i<16;i++) /*输出主菜单数组*/
{
gotoxy(10,i+1);
cprintf("%s",menu[i]);
}
textbackground(BLACK); /*设置背景颜色为黑色*/
window(1,1,80,25); /*恢复原窗口大小*/
gotoxy(10,21); /*移动光标*/
do{
printf("\n Enter you choice(0~14):"); /*在菜单窗口外显示提示信息*/
scanf("%s",s); /*输入选择项*/
c=atoi(s); /*将输入的字符串转化为整形数*/
}while(c<0||c>14); /*选择项不在0~14之间重输*/
return c; /*返回选择项,主程序根据该数调用相应的函数*/
}
STUDENT *init()
{
return NULL;
}
/*创建链表*/
STUDENT *create()
{
int i; int s;
STUDENT *h=NULL,*info; /* STUDENT指向结构体的指针*/
for(;;)
{
info=(STUDENT *)malloc(sizeof(STUDENT)); /*申请空间*/
if(!info) /*如果指针info为空*/
{
printf("\nout of memory"); /*输出内存溢出*/
return NULL; /*返回空指针*/
}
inputs("enter no:",info->no,11); /*输入学号并校验*/
if(info->no[0]=='@') break; /*如果学号首字符为@则结束输入*/
inputs("enter name:",info->name,15); /*输入姓名,并进行校验*/
printf("please input %d score \n",N); /*提示开始输入成绩*/
s=0; /*计算每个学生的总分,初值为0*/
for(i=0;i<N;i++) /*N门课程循环N次*/
{
do{
printf("score%d:",i+1); /*提示输入第几门课程*/
scanf("%d",&info->score[i]); /*输入成绩*/
if(info->score[i]>100||info->score[i]<0) /*确保成绩在0~100之间*/
printf("bad data,repeat input\n"); /*出错提示信息*/
}while(info->score[i]>100||info->score[i]<0);
s=s+info->score[i]; /*累加各门课程成绩*/
}
info->sum=s; /*将总分保存*/
info->average=(float)s/N; /*求出平均值*/
info->order=0; /*未排序前此值为0*/
info->next=h; /*将头结点做为新输入结点的后继结点*/
h=info; /*新输入结点为新的头结点*/
}
return(h); /*返回头指针*/
}
/*输入字符串,并进行长度验证*/
inputs(char *prompt, char *s, int count)
{
char p[255];
do{
printf(prompt); /*显示提示信息*/
scanf("%s",p); /*输入字符串*/
if(strlen(p)>count)printf("\n too long! \n"); /*进行长度校验,超过count值重输入*/
}while(strlen(p)>count);
strcpy(s,p); /*将输入的字符串拷贝到字符串s中*/
}
/*输出链表中结点信息*/
void print(STUDENT *h)
{
int i=0; /* 统计记录条数*/
STUDENT *p; /*移动指针*/
clrscr(); /*清屏*/
p=h; /*初值为头指针*/
printf("\n\n\n****************************STUDENT********************************\n");
printf("|rec|nO | name | sc1| sc2| sc3| sum | ave |order|\n");
printf("|---|----------|---------------|----|----|----|--------|-------|-----|\n");
while(p!=NULL)
{
i++;
printf("|%3d |%-10s|%-15s|%4d|%4d|%4d| %4.2f | %4.2f | %3d |\n", i, p->no,p->name,p->score[0],p->score[1],
p->score[2],p->sum,p->average,p->order);
p=p->next;
}
printf("**********************************end*********************************\n");
}
/*删除记录*/
STUDENT *delete(STUDENT *h)
{
STUDENT *p,*q; /*p为查找到要删除的结点指针,q为其前驱指针*/
char s[11]; /*存放学号*/
clrscr(); /*清屏*/
printf("please deleted no\n"); /*显示提示信息*/
scanf("%s",s); /*输入要删除记录的学号*/
q=p=h; /*给q和p赋初值头指针*/
while(strcmp(p->no,s)&&p!=NULL) /*当记录的学号不是要找的,或指针不为空时*/
{
q=p; /*将p指针值赋给q作为p的前驱指针*/
p=p->next; /*将p指针指向下一条记录*/
}
if(p==NULL) /*如果p为空,说明链表中没有该结点*/
printf("\nlist no %s student\n",s);
else /*p不为空,显示找到的记录信息*/
{
printf("*****************************have found***************************\n");
printf("|no | name | sc1| sc2| sc3| sum | ave |order|\n");
printf("|----------|---------------|----|----|----|--------|-------|-----|\n");
printf("|%-10s|%-15s|%4d|%4d|%4d| %4.2f | %4.2f | %3d |\n", p->no,
p->name,p->score[0],p->score[1],p->score[2],p->sum,
p->average,p->order);
printf("********************************end*******************************\n");
getch(); /*压任一键后,开始删除*/
if(p==h) /*如果p==h,说明被删结点是头结点*/
h=p->next; /*修改头指针指向下一条记录*/
else
q->next=p->next; /*不是头指针,将p的后继结点作为q的后继结点*/
free(p); /*释放p所指结点空间*/
printf("\n have deleted No %s student\n",s);
printf("Don't forget save\n");/*提示删除后不要忘记保存文件*/
}
return(h); /*返回头指针*/
}
Ⅳ c语言“学生成绩管理系统”课程设计报告 我想知道要重新创建一个txt用来录入学生成绩么怎么弄ns流程图
我的这个程序不是所有的功能都能实现,我当初也是做的这个程序,我答辩时老师只是看了你的程序的运行情况,并没有仔细看你的题目要求,只要能运行出来就可以了,这是那程序和流程图,希望可以帮到你:
#include<stdio.h>
#include<string.h>
#defineN3
structstudent
{
intmath;
intnumber;
charname[20];
intlanguage;
intJN;
}student[4];
voidmain()
{
voidsave();/*对输入的学生信息进行保存*/
voidload();/*将用户输入的学生信息读入到(out.txt)中*/
voidinput();/*将学生的信息输入进去*/
voidsum();/*对用户输入的学生成绩进行求和*/
voidsearch();/*统计用户输入的学生成绩中只要有于60分的人数和姓名*/
voidoutput();/*实现循环功能*/
intn;
printf(" ");
printf("学生成绩管理 ");
printf(" ");
printf("1.录入学生信息 ");
printf("2.浏览学生的平均分和总分 ");
printf("3.不及格的人数和姓名及科目 ");
printf("4.全班学生信息 ");
printf("5.退出 ");
printf("请输入你的选择 ");
printf(" ");
scanf("%d",&n);
switch(n)
{
case1:printf("输入信息 ");printf(" ");input();main();break;
case2:printf("浏览学生的平均分和总分 ");printf(" ");sum();main();break;
case3:printf("不及格的人数和姓名 ");printf(" ");search();main();break;
case4:printf("全班学生信息 ");printf(" ");output();main();break;
default:break;
}
}
voidsave(intm)
{
inti;
FILE*fp;
if((fp=fopen("out.txt","wb"))==NULL) //在当前程序运行目录下自动建立out.dat文件,用二进制打开
{
printf("打开文件出错 ");
return;
}
for(i=0;i<m;i++)
if(fwrite(&student[i],sizeof(structstudent),1,fp)!=1)
printf("cuo ");
fclose(fp);
}
voidinput()
{
inti;
for(i=0;i<N;i++)
{
printf("请输入学生的学号:");
scanf("%d",&student[i].number);
printf("请输入姓名: ");
scanf("%s",student[i].name);
printf("请输入数学成绩: ");
scanf("%d",&student[i].math);
printf("请输入c语言成绩: ");
scanf("%d",&student[i].language);
printf("请输入日语成绩: ");
scanf("%d",&student[i].JN);
printf("请输入你的选择 ");
printf(" ");
}
printf(" 创建完毕! ");
save(N);
}
voidsum()
{ inti;intsum[N],ave[N];
for(i=0;i<N;i++)
{
sum[i]=student[i].math+student[i].language+student[i].JN;
ave[i]=sum[i]/3;
}
for(i=0;i<3;i++)
printf("第%d名学生的总分:%3d,平均分%d ",i+1,sum[i],ave[i]);
}
voidoutput()
{
inti;
for(i=0;i<N;i++)
{
printf("学生的学号%d:",student[i].number);
printf("姓名:%s ",student[i].name);
printf("数学成绩:%d ",student[i].math);
printf("c语言成绩:%d ",student[i].language);
printf("日语成绩:%d ",student[i].JN);
printf(" ");
}
}
voidsearch()
{
inti,j=0;
for(i=0;i<N;i++)
if(student[i].math<50||student[i].language<50||student[i].JN<50)
{printf("姓名:%s ",student[i].name);j++;}
printf("不及格人数是%d",j);
}
voidload()
{
inti;
FILE*fp;
if((fp=fopen("out.txt","rb"))==NULL)
{ printf("打开文件出错 ");
return;
}
for(i=0;i<4;i++)
if(fread(&student[i],sizeof(structstudent),1,fp)!=1)
{
if(feof(fp));
{fclose(fp);
return;}
printf("打开文件出错 ");
}
fclose(fp);
Ⅵ c语言学生成绩管理系统课程设计
/* Note:Your choice is C IDE */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#define N 100
struct student
{
char num[10];
char name[10];
char tel[11];
};
/* 以下是函数原型说明,被调函数的定义在主调函数后面时,要加此部分 */
void myprint();
void mycreate();
void mydisplay();
void mysearch();
/* sch_num与sch_name函数被mysearch调用 */
void sch_num(FILE *fp);
void sch_name(FILE *fp);
void mymodify();
void myadd();
void mydelete();
/* del_num与del_name函数被mydelete调用 */
void del_num(FILE *fp);
void del_name(FILE *fp);
void mysort();
/* sort_num与sort_name函数被mysort调用 */
void sort_num();
void sort_name();
void main()
{
char choose,yes_no;
do
{
myprint(); /* 显示主菜单 */
printf(" ");
choose=getch();
switch(choose)
{
case '1': mycreate(); break; /* 创建 */
case '2': mydisplay(); break; /* 显示 */
case '3': mysearch(); break; /* 查询 */
case '4': mymodify(); break; /* 修改 */
case '5': myadd(); break; /* 添加 */
case '6': mydelete(); break; /* 删除 */
case '7': mysort(); break; /* 排序 */
case '0': break;
default:printf("\n %c为非法选项!\n",choose);
}
if(choose=='0')
break;
printf("\n 要继续选择吗(Y/N)?\n");
do
{
yes_no=getch();
}while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n');
}while(yes_no!='Y'||yes_no!='y');
}
void myprint() /* 显示菜单界面 */
{
printf("\n\n\n\n\n\n\n\n");
printf(" |----------------------------|\n");
printf(" | 请输入选项编号(0-7): |\n");
printf(" |----------------------------|\n");
printf(" | 1--创建信息管理系统 |\n");
printf(" | 2--显示信息管理系统 |\n");
printf(" | 3--查询信息管理系统 |\n");
printf(" | 4--修改信息管理系统 |\n");
printf(" | 5--添加信息管理系统 |\n");
printf(" | 6--删除信息管理系统 |\n");
printf(" | 7--排序信息管理系统 |\n");
printf(" | 0--退出 |\n");
printf(" |----------------------------|\n");
}
/* 定义创建信息管理系统的函数 */
void mycreate()
{
int i=1;
struct student temp;
FILE *fp;
fp=fopen("d:\\lbh\\guanli.dat","w");
if(fp==NULL)
{
printf("\n 打开文件失败!\n");
return;
}
printf("\n 请输入第1个记录:\n");
printf(" 学号(用#结束输入):");
do
{
gets(temp.num);
}while(strcmp(temp.num,"")==0);
printf(" 姓名(用#结束输入):");
gets(temp.name);
printf(" 电话号码(用#结束输入):");
gets(temp.tel);
while(temp.num[0]!='#'&&temp.name[0]!='#'&&temp.tel[0]!='#')
{
fprintf(fp,"%23s%15s%15s\n",temp.num,temp.name,temp.tel);
i++;
printf("\n 请输入第%d个记录:\n",i);
printf(" 学号(用#结束输入):");
do
{
gets(temp.num);
}while(strcmp(temp.num,"")==0);
printf(" 姓名(用#结束输入):");
gets(temp.name);
printf(" 电话号码(用#结束输入):");
gets(temp.tel);
}
fclose(fp);
}
/* 定义显示信息管理系统的函数 */
void mydisplay()
{
int n=0;
struct student temp;
FILE *fp;
fp=fopen("d:\\lbh\\guanli.dat","r+");
if(fp==NULL)
{
printf("\n 打开文件失败!\n");
return;
}
// clrscr();
printf(" 学号 姓名 电话号码\n");
while(feof(fp)==0)
{
fscanf(fp,"%23s%15s%15s\n",&temp.num,&temp.name,&temp.tel);
printf("%23s%15s%15s\n",temp.num,temp.name,temp.tel);
n++;
}
if(n==0)
printf("\n 文件中无记录!\n");
else
printf("\n 文件中共有%d个记录!\n",n);
fclose(fp);
}
/* 定义查询信息管理系统的函数 */
void mysearch()
{
char c;
FILE *fp;
fp=fopen("d:\\lbh\\guanli.dat","r+");
if(fp==NULL)
{
printf("\n 打开文件失败!\n");
return;
}
printf("\n 按学号查询(h),还是按姓名查询(m)?");
c=getch();
if(c=='h'||c=='H')
sch_num(fp); /* 按学号查询 */
if(c=='m'||c=='M')
sch_name(fp); /* 按姓名查询 */
else
printf("\n 非法字符!\n");
fclose(fp);
}
/* 定义按学号查询信息管理系统的函数 */
void sch_num(FILE *fp)
{
int flag=0,n=0;
char tempnum[10];
struct student temp;
printf("\n 请输入要查询记录的学号:");
gets(tempnum);
while(feof(fp)==0)
{
fscanf(fp,"%23s%15s%15s\n",&temp.num,&temp.name,&temp.tel);
if(strcmp(tempnum,temp.num)==0)
{
if(flag==0)
printf(" 学号 姓名 电话号码\n");
printf("%23s%15s%15s\n",temp.num,temp.name,temp.tel);
flag=1;
}
n++;
}
if(n==0)
printf("\n 文件中无记录!\n");
else
if(flag==0)
printf("\n 文件中无此人!\n");
}
/* 定义按姓名查询信息管理系统的函数 */
void sch_name(FILE *fp)
{
int flag=0,n=0;
char tempname[10];
struct student temp;
printf("\n 请输入要查询记录的姓名:");
gets(tempname);
while(feof(fp)==0)
{
fscanf(fp,"%23s%15s%15s\n",&temp.num,&temp.name,&temp.tel);
if(strcmp(tempname,temp.name)==0)
{
if(flag==0)
printf(" 学号 姓名 电话号码\n");
printf("%23s%15s%15s\n",temp.num,temp.name,temp.tel);
flag=1;
}
n++;
}
if(n==0)
printf("\n 文件中无记录!\n");
else
if(flag==0)
printf("\n 文件中无此人!\n");
}
/* 定义修改信息管理系统的函数 */
void mymodify()
{
char c;
int n=0;
struct student *find,temp,record[100],*p; /* 最多100个记录 */
FILE *fp;
fp=fopen("d:\\lbh\\guanli.dat","r+");
if(fp==NULL)
{
printf("\n 打开文件失败!\n");
return;
}
p=record;
while(feof(fp)==0)
{
fscanf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
p++;
n++;
}
fclose(fp);
if(n==0)
{
printf("\n 文件中无记录!\n");
return;
}
printf("\n 请输入要修改记录的学号:");
gets(temp.num);
for(p=record;p<record+n;p++)
if(strcmp(temp.num,p->num)==0)
{
find=p; /* find记住修改记录的位置 */
break;
}
if(p==record+n)
{
printf("\n 无此人!\n");
return;
}
do
{
printf("\n 请输入正确的学号:");
do
{
gets(temp.num);
}while(strcmp(temp.num,"")==0);
printf(" 请输入正确的姓名:");
gets(temp.name);
printf(" 请输入正确的电话号码:");
gets(temp.tel);
for(p=record;p<record+n;p++)
if((strcmp(temp.num,p->num)==0)&&(p!=find))
{
printf("\n 学号重复,要重新输入吗(Y/N)?");
do
{
c=getch();
}while(c!='Y'&&c!='y'&&c!='N'&&c!='n');
putchar('\n');
break;
}
if(p==record+n)
{
*find=temp; /* find指向需要修改记录的位置 */
break;
}
}while(c=='Y'||c=='y');
fp=fopen("d:\\lbh\\guanli.dat","r+");
if(fp==NULL)
{
printf("\n 打开文件失败!\n");
return;
}
for(p=record;p<record+n;p++)
fprintf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
fclose(fp);
}
/* 定义添加信息管理系统的函数 */
void myadd()
{
char c;
int n=0;
struct student temp,record[N],*p;
FILE *fp;
fp=fopen("d:\\lbh\\guanli.dat","r+");
if(fp==NULL)
{
printf("\n 打开文件失败!\n");
return;
}
p=record;
while(feof(fp)==0)
{
fscanf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
p++;
n++;
}
fclose(fp);
do
{
printf("\n 请输入新记录的学号:");
do
{
gets(temp.num);
}while(strcmp(temp.num,"")==0);
printf(" 请输入新记录的姓名:");
gets(temp.name);
printf(" 请输入新记录的电话号码:");
gets(temp.tel);
for(p=record;p<record+n;p++)
if(strcmp(temp.num,p->num)==0)
{
printf("\n 学号重复,要重新输入吗(Y/N)?");
do
{
c=getch();
}while(c!='Y'&&c!='y'&&c!='N'&&c!='n');
putchar('\n');
break;
}
if(p==record+n)
{
*p=temp;
break;
}
}while(c=='Y'||c=='y');
fp=fopen("d:\\lbh\\guanli.dat","r+");
if(fp==NULL)
{
printf("\n 打开文件失败!\n");
return;
}
for(p=record;p<record+n+1;p++)
fprintf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
fclose(fp);
}
/* 定义删除信息管理系统的函数 */
void mydelete()
{
char c;
FILE *fp;
fp=fopen("d:\\lbh\\guanli.dat","r+");
if(fp==NULL)
{
printf("\n 打开文件失败!\n");
return;
}
printf("\n 按学号删除(h),还是按姓名删除(m)?");
c=getch();
if(c=='h'||c=='H')
del_num(fp); /* 按学号删除 */
if(c=='m'||c=='M')
del_name(fp); /* 按姓名删 */
else
printf("\n 非法字符!\n");
fclose(fp);
}
/* 定义按学号删除信息管理系统的函数 */
void del_num(FILE *fp)
{
int n=0;
char tempnum[10];
struct student record[N],*p,*k;
p=record;
while(feof(fp)==0)
{
fscanf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
p++;
n++;
}
fclose(fp);
printf("\n 请输入要删除记录的学号:");
gets(tempnum);
for(k=record;k<record+n;k++)
if(strcmp(tempnum,k->num)==0)
break; /* 找到要删记录结束循环 */
if(k<record+n) /* 提前结束循环,说明找到人 */
for(p=k;p<k+n-1;p++) /* 向左移一位,相当于删除记录 */
*p=*(p+1);
else
printf("\n 无此人!\n");
fp=fopen("d:\\lbh\\guanli.dat","w");
if(fp==NULL)
{
printf("\n 打开文件失败!\n");
return;
}
for(p=record;p<record+n-1;p++)
fprintf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
}
/* 定义按姓名删除信息管理系统的函数 */
void del_name(FILE *fp)
{
int n=0;
char tempname[10];
struct student record[N],*p,*k;
p=record;
while(feof(fp)==0)
{
fscanf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
p++;
n++;
}
fclose(fp);
printf("\n 请输入要删除记录的姓名:");
gets(tempname);
for(k=record;k<record+n;k++)
if(strcmp(tempname,k->name)==0)
break; /* 找到要删记录结束循环 */
if(k<record+n) /* 提前结束循环,说明找到人 */
for(p=k;p<k+n-1;p++) /* 向左移一位,相当于删除记录 */
*p=*(p+1);
else
printf("\n 无此人!\n");
fp=fopen("d:\\lbh\\guanli.dat","w");
if(fp==NULL)
{
printf("\n 打开文件失败!\n");
return;
}
for(p=record;p<record+n-1;p++)
fprintf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
}
/* 定义排序信息管理系统的函数 */
void mysort()
{
char c;
FILE *fp;
fp=fopen("d:\\lbh\\guanli.dat","r+");
if(fp==NULL)
{
printf("\n 打开文件失败!\n");
return;
}
fclose(fp);
printf("\n 按学号排序(h),还是按姓名排序(m)?");
c=getch();
if(c=='h'||c=='H')
sort_num(); /* 按学号排序 */
if(c=='m'||c=='M')
sort_name(); /* 按姓名排序 */
else
printf("\n 非法字符!\n");
}
/* 定义按学号排序信息管理系统的函数 */
void sort_num()
{
int i,j,k,n=0;
char c;
struct student record[N],*p,temp;
FILE *fp;
fp=fopen("d:\\lbh\\guanli.dat","r");
if(fp==NULL)
{
printf("\n 打开文件失败!\n");
return;
}
p=record;
while(feof(fp)==0)
{
fscanf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
p++;
n++;
}
fclose(fp);
printf("\n 按升序(s),还是按降序(j)?");
c=getch();
if(c=='s'||c=='S') /* 按学号的升序排列 */
for(i=0;i<n-1;i++) /* 选择法排序 */
{
k=i;
for(j=i+1;j<n;j++)
if(strcmp((p+k)->num,(p+j)->num)>0)
k=j;
temp=*(p+k);
*(p+k)=*(p+i);
*(p+i)=temp;
}
else
if(c=='j'||c=='J') /* 按学号的降序排列 */
for(i=0;i<n-1;i++) /* 选择法排序 */
{
k=i;
for(j=i+1;j<n;j++)
if(strcmp((p+k)->num,(p+j)->num)<0)
k=j;
temp=*(p+k);
*(p+k)=*(p+i);
*(p+i)=temp;
}
else
{
printf("\n 非法字符!\n");
return;
}
fp=fopen("d:\\lbh\\guanli.dat","w");
if(fp==NULL)
{
printf("\n 打开文件失败!\n");
return;
}
for(p=record;p<record+n;p++)
{
fprintf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
printf("%23s%15s%15s\n",p->num,p->name,p->tel);
}
fclose(fp);
}
/* 定义按姓名排序信息管理系统的函数 */
void sort_name()
{
int i,j,k,n=0;
char c;
struct student record[N],*p,temp;
FILE *fp;
fp=fopen("d:\\lbh\\guanli.dat","r+");
if(fp==NULL)
{
printf("\n 打开文件失败!\n");
return;
}
p=record;
while(feof(fp)==0)
{
fscanf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
p++;
n++;
}
fclose(fp);
printf("\n 按升序(s),还是按降序(j)?");
c=getch();
if(c=='s'||c=='S') /* 按姓名的升序排列 */
for(i=0;i<n-1;i++) /* 选择法排序 */
{
k=i;
for(j=i+1;j<n;j++)
if(strcmp((p+k)->name,(p+j)->name)>0)
k=j;
temp=*(p+k);
*(p+k)=*(p+i);
*(p+i)=temp;
}
else
if(c=='j'||c=='J') /* 按姓名的降序排列 */
for(i=0;i<n-1;i++) /* 选择法排序 */
{
k=i;
for(j=i+1;j<n;j++)
if(strcmp((p+k)->name,(p+j)->name)<0)
k=j;
temp=*(p+k);
*(p+k)=*(p+i);
*(p+i)=temp;
}
else
{
printf("\n 非法字符!\n");
return;
}
fp=fopen("d:\\lbh\\guanli.dat","w");
if(fp==NULL)
{
printf("\n 打开文件失败!\n");
return;
}
for(p=record;p<record+n;p++)
fprintf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
fclose(fp);
}