⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 无标题.txt

📁 学生成绩册程序,c 语言
💻 TXT
字号:
学生成绩册程序

本文由鹏程C语言教学网站整理收录
收录时间: 2003-6-8 8:45:12

--------------------------------------------------------------------------------

Author:     From:

#include"stdio.h"
#include"stdlib.h"
#include"conio.h"
#include"string.h"
#define NULL 0
#define TYPE struct stu
#define LTYPE struct lsn
#define LEN sizeof (struct stu)
#define LLEN sizeof (struct lsn)

TYPE *head;
char ends[20]={"STUEND"};
char endl[20]={"LSNEND"};
struct stu{
char name[20];
char num[7];
struct stu *next;
struct lsn *lesson;
};

struct lsn
{
char name[20];
char score[5];
struct lsn *next;
};

TYPE *inserts1(TYPE *head,TYPE *pj)
{ //插入课程函数
TYPE *pb ,*pf;
pb=head; /*使pb指向第一个结点*/
if(head==NULL)
{ /*空表插入*/
head=pj; /*使pj作为第一个结点*/
pj->next=NULL;
}
else
{
while((strcmp(pj->num,pb->num)>0)&&(pb->next!=NULL))
{ /*如果pj的学号大于pb*/
pf=pb; /*那么使pf指向pj指向的结点*/
pb=pb->next; /*使pj后移一个结点*/
} /*通过while循环 找出插入位置*/
if(strcmp(pj->num,pb->num)<0)
{ /*如果pj学号小于pb,则:*/
if(head==pb) head=pj; /*在第一结点之前插入*/
else pf->next=pj; /*在pf的结点之后插入*/
pj->next=pb;
}
else
{
pb->next=pj; /*在表末插入*/
pj->next=NULL;
}
}
return head;
}

TYPE * inserts()
{ //定义增加学生的inserts函数
//创建结点
TYPE *pi,*pb;
int flag1;
pi=(TYPE *)malloc(LEN);
gotoxy(1,7);clreol();gotoxy(1,7);
cprintf("请输入学生姓名:");
cscanf("%s",&pi->name);
do
{
gotoxy(1,9);clreol();gotoxy(1,9);
cprintf("请输入学号:");
cscanf("%s",pi->num);
}while(strlen(pi->num)!=6);
if(strcmp(pi->num,"000000")!=0)
{

pb=head;
while(pb!=NULL)
{
if(strcmp(pi->num,pb->num)==0) { flag1=1;break; }
else pb=pb->next;
} /*这个小循环用来检测是否重复增加学生*/

if(flag1==1)
{
cprintf("输入的学号与记录有冲重复,若想替换请在主菜单选择。");
return(head);
}
else
{
gotoxy(5,15);cprintf("你刚刚输入%s和%s,",pi->num,pi->name);gotoxy(1,17);
cprintf(" 请检查是否有错误,以便及时回主菜单更改。 ");
return(inserts1(head,pi));
}

}
else return head;
}

TYPE * delets()
{ //定义删除学生的delets函数,返回指针
TYPE *pf,*pb;
//char c;
char snum[6];
do
{
gotoxy(1,6);clreol();gotoxy(1,6);
cprintf("请输入学生学号:");
cscanf("%s",&snum);
}while(strlen(snum)!=6);
if(head!=NULL) /*如不为空表*/
{
pb=head;
while (strcmp(pb->num,snum)!=0 && pb->next!=NULL)
{/*当不是要删除的结点,而且也不是最后一个结点时,继续循环*/
pf=pb;
pb=pb->next;
}/*pf指向当前结点,pb指向下一结点*/
if(strcmp(pb->num,snum)==0)
{
//printf("真的要删除该项纪录吗?(N/Y)");
// cscanf("%c",c);
//if(c!=78&&c!=110)
//{
if(pb==head)
head=pb->next;
/*如找到被删结点,且为第一结点,则使head指向第二个结点,
否则使pf所指结点的指针指向下一结点*/
else pf->next=pb->next;
free(pb);
cprintf(" 成功删除!\n");
//}
return head;
}
else
{
cprintf(" 没有这项记录!\n");
return head;
}
}
else
{
cprintf(" 没有任何记录!\n");
return head;
}
}

void modifys()
{
TYPE *pb;
int flag4;
char num[7];
do
{
gotoxy(1,6);clreol();gotoxy(1,6);
cprintf("请输入学号:");
cscanf("%s",&num);
}while(strlen(num)!=6);
//检测是否输入正确
pb=head;
while(pb!=NULL)
{
if(strcmp(num,pb->num)==0)
{
flag4=4;
gotoxy(1,7);cprintf("请输入姓名:");
cscanf("%s",&pb->name);
gotoxy(5,15);cprintf(" 你刚刚输入%s,",pb->name);gotoxy(1,17);
cprintf(" 请检查是否有错误,以便及时回主菜单更改。 ");
break;
}
else pb=pb->next;
}
if(flag4!=4) cprintf(" 没有这个学生的纪录!");
}

LTYPE *insertl1(LTYPE *headl, LTYPE *pl )
{ /*定义插入课程函数,每次都插在头结点之前; */
pl->next=headl;
return pl;
}

injectl(LTYPE *headl,char name[])
{
LTYPE *pl;
int flag2;
pl=headl;
while(pl!=NULL)
{
if(strcmp(pl->name,name)==0) {flag2=2;break;}
else pl=pl->next;
}
if (flag2==2) return (1);/*有记录,返回1*/
else return(0);
}

void insertl()
{
TYPE *pb;
LTYPE *pl,*pll;
int c, flag8;
char num[7];
do
{ gotoxy(1,6);clreol();gotoxy(1,6);
cprintf("请输入学号:");
cscanf("%s",&num);
} while(strlen(num)!=6);
pb=head;
while(pb!=NULL)
{
if(strcmp(num,pb->num)==0)
{
c=1; flag8=8;
while(c==1)
{
pl=(LTYPE *)malloc(LLEN);
gotoxy(1,7);clreol();gotoxy(1,7);
cprintf("请输入课程名:");
cscanf("%s",&pl->name);
gotoxy(1,8);clreol();gotoxy(1,8);
cprintf("请输入成绩:");
cscanf("%s",&pl->score);
if(injectl(pb->lesson, pl->name)!=1)
{
pll=pb->lesson;
pl->next=pll;
pb->lesson=pl;
cprintf(" 插入课程成功!");
gotoxy(5,15);cprintf("你刚刚输入%s的成绩为%s,",pl->name,pl->score);gotoxy(1,17);
cprintf(" 请检查是否有错误,以便及时回主菜单更改。 ") ;
}
else cprintf(" 与纪录有重复!");
cprintf(" 选择1 继续添加,其余返回上级菜单 ");
cscanf("%d",&c);
}break;
}
else pb=pb->next;
}
if(flag8!=8) { cprintf(" \n 没有此学生记录!");}
}

void modify()
{
int c, flag5,flag7;
TYPE *pb;
LTYPE *p,*pl;
char num[7],lname[20];
do
{
gotoxy(1,6);clreol();gotoxy(1,6);
cprintf("请输入学号:");
cscanf("%s",&num);
}while(strlen(num)!=6);
pb=head;
while(pb!=NULL)
{
if(strcmp(num,pb->num)==0)
{
flag5=5;
cprintf("\n 0 退出 1 修改成绩 ");
cscanf("%d",&c);
if(c==0) break;
else
{
while(c==1)
{
p=pb->lesson;
gotoxy(1,8);clreol();gotoxy(1,8);
cprintf("请输入课程名:");
cscanf("%s",lname);
pl=p;
while(pl!=NULL)
{
if(strcmp(pl->name,lname)==0)
{
flag7=7;gotoxy(1,9);clreol();gotoxy(1,9);
cprintf("请输入成绩:");
cscanf("%s",&pl->score);
cprintf("\n 修改成功!");
gotoxy(5,15);cprintf("你刚刚输入%s和%s,",pl->name,pl->score);gotoxy(1,17);
cprintf(" 请检查是否有错误,以便及时回主菜单更改。 ");
break;
}
else pl=pl->next;
}
if (flag7!=7) cprintf("\n 没有这项课程纪录。");
cprintf(" 请选择 1 继续修改成绩 其余退出……");
cscanf("%d",&c);
}
}
}
else pb=pb->next;
}
if(flag5!=5) cprintf(" 没有这个学生的纪录!");
}

void printall()
{
TYPE *p;
p=head;
while(p!=NULL)
{
cprintf("学生 %-20s%-54s",p->name,p->num) ;
{
struct lsn *pls;
pls=p->lesson;
if(pls!=NULL)
{
cprintf(" 成绩如下: ");
while(pls!=NULL)
{
cprintf("%-20s%-60s",pls->name,pls->score);
pls=pls->next;
}
}
p=p->next;
}
}
}

void dt_saves()
{
FILE *fp;
TYPE *p;
p=head;
if((fp=fopen("stu.txt","w"))==NULL)
cprintf("cant open file!\n");
else
{
while(p!=NULL)
{ fprintf(fp,"%20s%7s",p->name,p->num) ;
{
struct lsn *pls;
pls=p->lesson;
while(pls!=NULL)
{
fprintf(fp,"%20s%7s",pls->name,pls->score);
pls=pls->next;
}fprintf(fp,"%20s%7s",endl,endl);
p=p->next;
}
} fprintf(fp,"%20s%7s",ends,ends);
}
fclose(fp);
}

void insertcl()
{
char clname[20];
cprintf("课程名");
cscanf("%s",&clname);
TYPE *pb;
LTYPE *pi,*pll;
pb=head;
while(pb!=NULL)
{
pi=(LTYPE *)malloc(LLEN);
strcpy(pi->score,"-1");
strcpy(pi->name,clname);/*好像是这个库函数,把clname赋给pb->name*/
pll=pb->lesson;
pi->next=pll;
pb->lesson=pi;
pb=pb->next;
}
}

void prints(TYPE *head)
{
TYPE *p;
p=head;
while (p!=NULL)
{
cprintf("%-20s",p->num);
cprintf("%-60s",p->name);
p=p->next;
}
}

void deletl()
{
TYPE *ps;
LTYPE *pf,*pb,*headl;
char c;
int i=1,flag;
char snum[7],lname[20];
do
{
gotoxy(1,6);clreol();gotoxy(1,6);
cprintf("请输入学号:");
cscanf("%s",&snum);
}while(strlen(snum)!=6);
ps=head;
while(ps!=NULL)
{
if(strcmp(snum,ps->num)==0)
{
flag=1;
while(i==1)
{
headl=ps->lesson;
gotoxy(1,8);clreol();gotoxy(1,8);
cprintf("请输入课程名:");
cscanf("%s",&lname);
pb=headl;
while (strcmp(pb->name,lname)!=0 && pb->next!=NULL)
{/*当不是要删除的结点,而且也不是最后一个结点时,继续循环*/
pf=pb;
pb=pb->next;
}/*pf指向当前结点,pb指向下一结点*/
if(strcmp(pb->name,lname)==0)
{
// cprintf(" 真的要删除该项纪录吗?(Y/N)");
// c=getch();
// if(c=='y'||c=='Y')
{
if(pb==headl)
headl=pb->next;
/*如找到被删结点,且为第一结点,则使headl指向第二个结点,
否则使pf所指结点的指针指向下一结点*/
else pf->next=pb->next;
free(pb);
cprintf("\n 已经成功删除!\n");
}
ps->lesson=headl;

}
else{ cprintf("\n 没有此课程记录"); }
cprintf("\n 选择 1 继续删除课程,其余返回上级菜单");
cscanf("%d",&i);
}break;
}
else ps=ps->next;
}
if(flag!=1) cprintf("\n 没有此学生记录!");
}

void dt_loads()
{
FILE *fp;
TYPE *p1;
LTYPE *headl,*pls;
head=NULL;
if((fp=fopen("stu.txt","a+"))!=NULL)
{ //开始读入学生
fscanf(fp,"%20s%7s",p1->name,p1->num);
while(strcmp(p1->num,ends)!=0)
{
{ //开始读入成绩
headl=NULL;
{
fscanf(fp,"%20s%7s",pls->name,pls->score);
while(strcmp(pls->name,endl)!=0)
{
headl=insertl1(headl,pls);
pls=(LTYPE *)malloc(LLEN);
fscanf (fp,"%20s%7s",pls->name,pls->score);
}
p1->lesson=headl;
}
}
head=inserts1(head,p1);
p1=(TYPE*)malloc(LEN);
fscanf(fp,"%20s%7s",p1->name,p1->num);
}
}
}

void asubmenu()
{
clrscr();
gotoxy(2,2);printf("|----------------------------------------------------------------------------|");
gotoxy(2,3);printf("| 学生成绩册模拟操作程序 编程: 宋印军 012373 2003.01.01 |");
gotoxy(2,4);printf("|----------------------------------------------------------------------------|");
gotoxy(2,5);printf("******************************************************************************");
gotoxy(1,6);
}

void bsubmenu()
{
gotoxy(25,7 );textcolor(12);cprintf(" 1 ");textcolor(10);cprintf("载 入 资 料 ");
gotoxy(25,8 );textcolor(12);cprintf(" 2 ");textcolor(10);cprintf("增 添 学 生 ");
gotoxy(25,9 );textcolor(12);cprintf(" 3 ");textcolor(10);cprintf("删 除 学 生 ");
gotoxy(25,10);textcolor(12);cprintf(" 4 ");textcolor(10);cprintf("增 加 课 程 ");
gotoxy(25,11);textcolor(12);cprintf(" 5 ");textcolor(10);cprintf("删 除 课 程 ");
gotoxy(25,12);textcolor(12);cprintf(" 6 ");textcolor(10);cprintf("修 改 姓 名 ");
gotoxy(25,13);textcolor(12);cprintf(" 7 ");textcolor(10);cprintf("修 改 课 程 ");
gotoxy(25,14);textcolor(12);cprintf(" 8 ");textcolor(10);cprintf("察 看 名 单 ");
gotoxy(25,15);textcolor(12);cprintf(" 9 ");textcolor(10);cprintf("所 有 资 料 ");
gotoxy(25,16);textcolor(12);cprintf(" 10 ");textcolor(10);cprintf("保 存 资 料 ");
gotoxy(25,17);textcolor(12);cprintf(" 11 ");textcolor(10);cprintf("退 出 系 统 ");
gotoxy(25,18);textcolor(12);cprintf(" 12 ");textcolor(10);cprintf("集 体 添 课 ");
gotoxy( 2,24);printf("******************************************************************************");
}
void menu()
{
int choice;
clrscr();
asubmenu();
bsubmenu();
gotoxy(25,22);textcolor(10);cprintf(" 请一定要仔细输入学号和成绩......");
gotoxy(25,20);textcolor(14);cprintf(" 请 选 择 ");
cscanf("%d",&choice);
asubmenu();
switch(choice)
{
case 1: {dt_loads();getch();cprintf("以下是资料中的学生名单:\n");prints(head);getch();menu();}
case 2: {
int i,j;
cprintf("请输入学生人数:");
cscanf("%d",&i);
for(j=0;j<i;j++)
head=inserts();
prints(head);
getch();getch();
menu();
}
case 3: {head= delets();getch();getch();menu();}
case 4: {insertl();getch();getch();menu();}
case 5: {deletl();getch();getch();menu();}
case 6: {modifys();getch();getch();menu();}
case 7: {modify();getch();getch();menu();}
case 8: {getch();prints(head);getch();menu();}
case 9: {printall();getch();getch();menu();}
case 10:{dt_saves();gotoxy(25,21);clreol();gotoxy(25,21);cprintf("\n资料保存成功!"); getch();getch();menu();}
case 11:{
bsubmenu();
gotoxy(25,21);clreol();gotoxy(25,21);cprintf(" 谢谢您的使用,再见!\n");
getch();
exit(0);
}
case 12:{insertcl();menu();}
default:{gotoxy(25,12);cprintf("对不起,您的输入有错误。");getch();getch();menu();}
}
}


void main()
{
menu();
}

 

 





网友评论:------我要发表评论

· 晕(小尾巴)
有没有搞错?这个程序怎么这么长?先不要说有没有错误,就是看我都看不下去,我根本就没有这个耐心嘛!!!!!!
· 晕(小尾巴)
有没有搞错?这个程序怎么这么长?先不要说有没有错误,就是看我都看不下去,我根本就没有这个耐心嘛!!!!!!
· 别发牢骚(wuwu)
你行?那就把修改后的程序拿出来大家共享!
· 你好(南方不败)
该程序运行过了吗???
· 你好(南方不败)
该程序运行过了吗???
· 各位好!!!(阿世!!!)
我希望那些说别人不是的人在下个星期也发一个这样的程序上来,!!要不就是自己没有用, 而把不满发在别人身上,这种人是最垃圾的了,!!有种的话发一个上来看看,!!!声明: 我不是本人, 
· 你要改进哦(太烂了)
你写的真是太烂了,我知道你的基础现在可能不那么扎实,加油就是了,多动脑筋,多写,多操作。相信自己。
· gsdfag(fdgv)
错误 太多无法更改也 可以删除也 
· 不是很好啊(ha a )
你写的东西还要改进啊!
· 去死(xy)
别人都说你是垃圾.,垃圾 程序
· 不动(feng)
你好你写的怎么这么多啊有能用简单的方法吗
· %%(**)
您好: 您能不能用简单的方法编这个程序?有关链表的内容太难了。谢谢!
· 一二三(一二三)
你这个是垃圾
· 看看别人怎么说而已(789)
借光,借光看看别人怎么说而已
· 26处错(韩水)

· 这个程序尽是错误!~(玄青风)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -