C语言程序设计
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言程序设计相关的知识,希望对你有一定的参考价值。
用C语言程序设计管理学生信息(包括学号,姓名,3门科目的成绩,总分)要求:输入以上信息,显示信息,还能添加信息,删除信息,修改信息,总分排序(升序降序无要求),通过学号查找学生信息。。100分悬赏,发代码上来。
每个功能都能单独执行。可以选择性的执行
#include "stdio.h"
#include "conio.h"
#include "time.h"
#define M 1
int tol=0; /*文件中记录的总个数*/
/*结构体,每条记录的结构*/
struct student
char num[10];
char name[20];
int classes;
int age;
char sex[2];
char city[20];
char tele[12];
;
struct student info[M];
struct student info_t[M];
/*建立存储信息的文件*/
void creat(void)
/*如果是第一次运行该系统,将创建一个记录信息的文件*/
FILE *fp; int i,j;
char m[sizeof(info)]='0';
if ((fp=fopen("info.bxt","rb"))==NULL)
fp=fopen("info.bxt","ab");
if ((fp)==NULL)
printf("文件打开失败"); delay(9000000);
exit(0);
fclose(fp);
if ((fp=fopen("info.bxt","rb+"))==NULL)
printf("文件打开失败"); delay(9000000);
exit(0);
/*fseek(fp,0L,2);
i=ftell(fp);
if(i==0)
printf("没有数据,请先输入数据");
printf("请输入数据:\n");
disp_table(); putchar('\n');*/
rewind(fp); fscanf(fp,"%d",&tol);
rewind(fp); fwrite(&m,sizeof(info),1,fp);
rewind(fp); fprintf(fp,"%d",tol); /*将记录总数写入文件*/
printf("文件中共有 %d 个记录\n",tol);
/*fseek(fp,0L,2);
i=ftell(fp);*/
if(tol==0)
printf("没有数据,请先输入数据!");
fclose(fp);
/*输出n个字符,方便各个菜单项的显示*/
void disp_str(char ch, int n )
int j;
for (j=0; j<n; j++ )
printf("%c",ch);
/*显示表头,用于输出记录时的标题的显示*/
void disp_table(void)
printf("学号"); disp_str(' ',6);
printf("姓名"); disp_str(' ',6);
printf("班级"); disp_str(' ',6);
printf("年龄"); disp_str(' ',4);
printf("性别"); disp_str(' ',4);
printf("地址"); disp_str(' ',6);
printf("电话"); disp_str(' ',7);
/*添加记录*/
void add(void)
FILE *fp; int i,m;
printf(" 添加记录----请按下列格式添加学生记录,各数据之间以“空格键”或“回车键”隔开\n");
if ((fp=fopen("info.bxt","rb+"))==NULL)
printf("文件打开失败"); delay(9000000);
exit(0);
rewind(fp); fscanf(fp,"%d",&tol); /*将记录总数传递给全局变量*/
printf("文件中共有 %d 个记录\n",tol);
fclose(fp);
if ((fp=fopen("info.bxt","rb+"))==NULL)
printf("文件打开失败");
exit(0);
fseek(fp,0L,2);
m=ftell(fp); /*printf("%d\n",m); 判断是否有数据*/
if(m==sizeof(info))
printf("没有数据,请先输入数据\n");
printf("请输入数据:\n");
disp_table(); putchar('\n');
scanf("%s %s %d %d %s %s %s",info_t->num,info_t->name,
&info_t->classes,&info_t->age,info_t->sex,info_t->city,info_t->tele);
fseek(fp,sizeof(info),0);
for( i=0; i<tol; i++ )
fread(&info,sizeof(info),1,fp);
if(strcmp(info_t->num,info->num)==0)
printf("该学号已经存在,请重新输入数据\n");
fclose(fp);
add_menu();
fseek(fp,0L,2);
fwrite(&info_t,sizeof(info),1,fp);
++tol; printf("添加记录成功!");
fclose(fp);
if ((fp=fopen("info.bxt","rb+"))==NULL) /*更新总记录*/
printf("文件打开失败");
exit(0);
rewind(fp);fprintf(fp,"%d",tol);
fclose(fp);
/*添加记录菜单的显示*/
int add_menu()
int key;
printf("\n\n\n");
disp_str(' ',25);
printf("是否继续添加记录?\n");
disp_str(' ',10);disp_str('*',50);
putchar('\n');
disp_str(' ',17); putchar('*'); printf(" 1.是,继续添加记录\n");
disp_str(' ',17); putchar('*'); printf(" 2.否,返回主菜单\n");
disp_str(' ',17); putchar('*'); printf(" 3.否,退出系统\n");
disp_str(' ',10); putchar('*'); disp_str('*',50); putchar('\n');
disp_str(' ',17); printf("请输入(1~3)其他键退出:\n");
scanf("%d",&key);
switch(key)
case 1:
clrscr();/*清屏*/
add();
add_menu();
break;
case 2:
clrscr();/*清屏*/
menu();
break;
case 3:
exit(0);
break;
default:
exit(0);
/*修改记录*/
int chang(void)
FILE *fp; int i,j,m=0; char key[10];
if ((fp=fopen("info.bxt","rb+"))==NULL)
printf("文件打开失败");
exit (0);
rewind(fp); fscanf(fp,"%d",&tol);
printf("文件中共有 %d 个记录\n",tol);
rewind(fp); fseek(fp,sizeof(info),0);
printf("请输入要修改的学生记录的学号\n");
scanf("%s",key);
for( i=0; i<tol; i++ )
fread(&info,sizeof(info),1,fp);
if(strcmp(key,info->num)==0)
j=i+1;
++m;
if(j<=tol)
printf("请输入修改后的数据:\n");
disp_table(); putchar('\n');
scanf("%s %s %d %d %s %s %s",info->num,info->name,
&info->classes,&info->age,info->sex,info->city,info->tele);
fseek(fp,sizeof(info)*j,0);
fwrite(&info,sizeof(info),1,fp); printf("修改成功!\n");
if(m==0)
printf("文件中没有该学号!\n");
fclose(fp);
chang_menu();
/* getch();*/
/*修改记录菜单的显示*/
int chang_menu()
int key;
printf("\n\n\n");
disp_str(' ',25);
printf("是否继续修改记录?\n");
disp_str(' ',10);disp_str('*',50);
putchar('\n');
disp_str(' ',17); putchar('*'); printf(" 1.是,继续修改记录\n");
disp_str(' ',17); putchar('*'); printf(" 2.否,返回主菜单\n");
disp_str(' ',17); putchar('*'); printf(" 3.否,退出系统\n");
disp_str(' ',10); putchar('*'); disp_str('*',50); putchar('\n');
disp_str(' ',17); printf("请输入(1~3)其他键退出:\n");
scanf("%d",&key);
switch(key)
case 1:
clrscr();/*清屏*/
chang();
chang_menu();
break;
case 2:
clrscr();/*清屏*/
menu();
break;
case 3:
exit(0);
break;
default:
exit(0);
/*功能菜单的显示*/
int menu(void)
int key;
printf("\n\n\n");
disp_str(' ',25);
printf("学籍管理系统功能菜单\n");
disp_str(' ',10);disp_str('*',50);
putchar('\n');
disp_str(' ',17); putchar('*'); printf(" 1.添加记录----按学号添加学生记录\n");
disp_str(' ',17); putchar('*'); printf(" 2.修改记录----按学号修改学生记录\n");
disp_str(' ',17); putchar('*'); printf(" 3.查询记录----按学号查询某条记录\n");
disp_str(' ',17); putchar(' '); printf(" ----按班级查询部分记录\n");
disp_str(' ',17); putchar('*'); printf(" 4.显示记录----按学号显示所有记录\n");
disp_str(' ',17); putchar(' '); printf(" ----按输入显示所有记录\n");
disp_str(' ',17); putchar('*'); printf(" 5.删除记录----按学号删除学生记录\n");
disp_str(' ',17); putchar('*'); printf(" 6.退出....\n");
disp_str(' ',10); putchar('*'); disp_str('*',50); putchar('\n');
disp_str(' ',17); printf("请输入(1~5)其他键退出:\n");
scanf("%d",&key);
switch(key)
case 1:
clrscr();/*清屏*/
add();
add_menu();
break;
case 2:
clrscr();
chang();
break;
case 3:
clrscr();
look_menu();
break;
case 4:
clrscr();
show_menu();
break;
case 5:
clrscr();
dele();
break;
case 6:
clrscr();
exit(0);
break;
default:
exit(0);
/*查询记录 的菜单的显示*/
int look_menu(void)
int key;
printf("\n\n\n");
disp_str(' ',25);
printf("查询记录菜单\n");
disp_str(' ',10);disp_str('*',50);
putchar('\n');
disp_str(' ',17); putchar('*'); printf(" 1.按“学号”查询 某条记录\n");
disp_str(' ',17); putchar('*'); printf(" 2.按“班级”查询 部分记录\n");
disp_str(' ',17); putchar('*'); printf(" 3.返回主菜单\n");
disp_str(' ',17); putchar('*'); printf(" 4.退出系统\n");
disp_str(' ',10); putchar('*'); disp_str('*',50); putchar('\n');
disp_str(' ',17); printf("请输入(1~4)其他键退出:\n");
scanf("%d",&key);
switch(key)
case 1:
clrscr();/*清屏*/
look_num();
break;
case 2:
clrscr();/*清屏*/
look_classes();
look_classes_menu();
break;
case 3:
clrscr();/*清屏*/
menu();
break;
case 4:
exit(0);
break;
default:
exit(0);
/*按学号查询记录*/
int look_num(void)
FILE *fp; int i,j,m=0; char key[10];
if ((fp=fopen("info.bxt","rb+"))==NULL)
printf("文件打开失败");
exit (0);
rewind(fp); fscanf(fp,"%d",&tol);
rewind(fp); fseek(fp,sizeof(info),0);
printf("请输入要查询的学生记录的“学号”\n");
scanf("%s",key);
for( i=0; i<tol; i++ )
fread(&info,sizeof(info),1,fp);
if(strcmp(key,info->num)==0)
disp_str(' ',2); disp_table();printf("\n");
disp_str(' ',2);printf("%-10s%-10s%-10d%-8d%-8s%-10s%-10s\n",info->num,info->name,
info->classes,info->age,info->sex,info->city,info->tele);m++;
if(m==0)
printf("文件中没有该学号!\n");
look_num_menu();
fclose(fp);
/*学号查询记录菜单的显示*/
int look_num_menu(void)
int key;
printf("\n\n\n");
disp_str(' ',25);
printf("是否继续查看记录?\n");
disp_str(' ',10);disp_str('*',50);
putchar('\n');
disp_str(' ',17); putchar('*'); printf(" 1.是,继续查看记录\n");
disp_str(' ',17); putchar('*'); printf(" 2.否,返回查询菜单\n");
disp_str(' ',17); putchar('*'); printf(" 3.否,返回主菜单\n");
disp_str(' ',17); putchar('*'); printf(" 4.否,退出系统\n");
disp_str(' ',10); putchar('*'); disp_str('*',50); putchar('\n');
disp_str(' ',17); printf("请输入(1~3)其他键退出:\n");
scanf("%d",&key);
switch(key)
case 1:
clrscr();/*清屏*/
look_num();
look_num_menu();
break;
case 2:
clrscr();/*清屏*/
look_menu();
break;
case 3:
clrscr();/*清屏*/
menu();
break;
case 4:
exit(0);
break;
default:
exit(0);
/*按班级查询记录*/
int look_classes(void)
FILE *fp; int i,j,m=0;
int key;
if ((fp=fopen("info.bxt","rb+"))==NULL)
printf("文件打开失败");
exit (0);
rewind(fp); fscanf(fp,"%d",&tol);
rewind(fp); fseek(fp,sizeof(info),0);
printf("请输入要查询的学生记录的“班级(1-5)”\n");
scanf("%d",&key);
disp_str(' ',2); disp_table();printf("\n");
for( i=0; i<tol; i++ )
fread(&info,sizeof(info),1,fp);
if(key-(info->classes)==0)
disp_str(' ',2);printf("%-10s%-10s%-10d%-8d%-8s%-10s%-10s\n",info->num,info->name,
info->classes,info->age,info->sex,info->city,info->tele); m++;
if(m==0)
printf("文件中没有该班级的记录!\n");
/*look_classes();*/
fclose(fp);
look_classes_menu();
/*查询记录菜单的显示*/
int look_classes_menu(void)
int key;
printf("\n\n\n");
disp_str(' ',25);
printf("是否继续查看记录?\n");
disp_str(' ',10);disp_str('*',50);
putchar('\n');
disp_str(' ',17); putchar('*'); printf(" 1.是,继续查看记录\n");
disp_str(' ',17); putchar('*'); printf(" 2.否,返回查询菜单\n");
disp_str(' ',17); putchar('*'); printf(" 3.否,返回主菜单\n");
disp_str(' ',17); putchar('*'); printf(" 4.否,退出系统\n");
disp_str(' ',10); putchar('*'); disp_str('*',50); putchar('\n');
disp_str(' ',17); printf("请输入(1~3)其他键退出:\n");
scanf("%d",&key);
switch(key)
case 1:
clrscr();/*清屏*/
look_classes();
look_classes_menu();
break;
case 2:
clrscr();/*清屏*/
look_menu();
break;
case 3:
clrscr();/*清屏*/
menu();
break;
case 4:
exit(0);
break;
default:
exit(0);
/*显示记录 的菜单的显示*/
int show_menu(void)
int key;
printf("\n\n\n");
disp_str(' ',25);
printf("查询记录菜单\n");
disp_str(' ',10);disp_str('*',50);
putchar('\n');
disp_str(' ',17); putchar('*'); printf(" 1.按“学号”显示 所有记录\n");
disp_str(' ',17); putchar('*'); printf(" 2.按“班级”显示 所有记录\n");
disp_str(' ',17); putchar('*'); printf(" 3.返回主菜单\n");
disp_str(' ',17); putchar('*'); printf(" 4.退出系统\n");
disp_str(' ',10); putchar('*'); disp_str('*',50); putchar('\n');
disp_str(' ',17); printf("请输入(1~6)其他键退出:\n");
scanf("%d",&key);
switch(key)
case 1:
show_num();
show_num_menu();
break;
case 2:
clrscr();/*清屏*/
show_input();
show_num_menu();
break;
case 3:
clrscr();/*清屏*/
menu();
break;
case 4:
exit(0);
break;
default:
exit(0);
/*按学号查询所有记录*/
int show_num(void)
FILE *fp1,*fp2; int i,j; /*struct student info_tt[1];*/
char press;
char ch;
if ((fp1=fopen("info.bxt","rb"))==NULL)
printf("cannot open file ");
exit (0);
if ((fp2=fopen("test.bxt","wb+"))==NULL)
printf("cannot open file ");
exit (0);
rewind(fp1); fscanf(fp1,"%d",&tol);
rewind(fp1);
while(!feof(fp1))
ch=fgetc(fp1);
fputc(ch,fp2);
if (ftell(fp1)==(sizeof(info)*(tol+1)))
break;
fclose(fp1);
rewind(fp2); fscanf(fp2,"%d",&tol);
for(j=0; j<tol; j++)
for(i=0; i<tol; i++)
rewind(fp2);fseek(fp2,sizeof(info)*(i+1),0);
fread(&info,sizeof(info),1,fp2);
fseek(fp2,sizeof(info)*(i+2),0);
fread(&info_t,sizeof(info),1,fp2);
if(strcmp(info_t->num,info->num)<0)
/*info_tt[0]=info[0];*/
fseek(fp2,sizeof(info)*(i+1),0);
fwrite(&info_t,sizeof(info),1,fp2);
fseek(fp2,sizeof(info)*(i+2),0);
fwrite(&info,sizeof(info),1,fp2);
/*记录的输出*/
rewind(fp2); fscanf(fp2,"%d",&tol);
printf("文件中共有 %d 个记录\n",tol);
rewind(fp2); /**/
fseek(fp2,sizeof(info),0);
for( i=0; i<tol; i++ )
if(i%10==0)
printf("\n\n");
disp_str(' ',2); printf("数据为\n");
disp_str('*',78);
printf("\n"); printf("文件中共有 %d 个记录\n",tol);
printf("序号:"); disp_str(' ',2);
disp_table();
putchar('\n');
printf("%3d",(i+1));disp_str(' ',4);
fread(&info,sizeof(info),1,fp2);
printf("%-10s%-10s%-10d%-10d%-10s%-10s%-10s\n",info->num,info->name,
info->classes,info->age,info->sex,info->city,info->tele);
putchar('\n');
if((i+1)%10==0)
putchar('\n'); printf("文件中共有 %d 个记录\n",tol);
disp_str('*',78);
printf("\n");
printf("按“ENTER键”查看下一页 ,其他键 退出--->返回主菜单");
press=getchar();
if(press!='\n')
break;
disp_str('*',78);putchar('\n');
fclose(fp2);
printf("按“ENTER键”继续");
getch();
/*学号查询记录菜单的显示*/
int show_num_menu()
int key;
printf("\n\n\n");
disp_str(' ',10);disp_str('*',50);
putchar('\n');
disp_str(' ',17); putchar('*'); printf(" 1.返回显示菜单\n");
disp_str(' ',17); putchar('*'); printf(" 2.返回主菜单\n");
disp_str(' ',17); putchar('*'); printf(" 3.退出系统\n");
disp_str(' ',10); putchar('*'); disp_str('*',50); putchar('\n');
disp_str(' ',17); printf("请输入(1~3)其他键退出:\n");
scanf("%d",&key);
switch(key)
case 1:
clrscr();/*清屏*/
show_menu();
break;
case 2:
clrscr();/*清屏*/
menu();
break;
case 3:
exit(0);
break;
default:
exit(0);
/*按输入查询记录*/
int show_input(void)
FILE *fp; char press; int i;
if ((fp=fopen("info.bxt","rb"))==NULL)
printf("文件打开失败");
exit (0);
rewind(fp); fscanf(fp,"%d",&tol);
printf("文件中共有 %d 个记录\n",tol);
rewind(fp); /**/fseek(fp,sizeof(info),0);
for( i=0; i<tol; i++ )
if(i%10==0)
printf("\n\n");
disp_str(' ',2); printf("数据为\n");
disp_str('*',78);
printf("\n"); printf("文件中共有 %d 个记录\n",tol);
printf("序号:"); disp_str(' ',2);
disp_table();
putchar('\n');
printf("%3d",(i+1));disp_str(' ',4);
fread(&info,sizeof(info),1,fp);
printf("%-10s%-10s%-10d%-10d%-10s%-10s%-10s\n",info->num,info->name,
info->classes,info->age,info->sex,info->city,info->tele);
putchar('\n');
if((i+1)%10==0)
putchar('\n');
disp_str('*',78);
printf("\n");
printf("按“ENTER键”查看下一页 ,其他键 退出--->返回主菜单");
press=getchar();
if(press!='\n')
break;
disp_str('*',78);putchar('\n');
fclose(fp);
printf("按“ENTER键”继续");
getch();
show_num_menu();/* */
/*删除记录*/
int dele(void)
FILE *fp; int i,j,m=0; char key[10];
FILE *fp1,*fp2;
char ch;
if ((fp=fopen("info.bxt","rb+"))==NULL)
printf("文件打开失败");
exit (0);
rewind(fp); fscanf(fp,"%d",&tol);
rewind(fp); fseek(fp,sizeof(info),0);
printf("请输入要删除的学生记录的“学号”\n");
scanf("%s",key);
for( i=0; i<tol; i++ )
fread(&info,sizeof(info),1,fp);
if(strcmp(key,info->num)==0)
printf("删除的学生记录为:\n");
disp_str(' ',2); disp_table();printf("\n");
disp_str(' ',2);printf("%-10s%-10s%-10d%-8d%-8s%-10s%-10s\n",info->num,info->name,
info->classes,info->age,info->sex,info->city,info->tele);m++;j=i+1;
if(m==0)
printf("文件中没有该学号!\n");
/*printf("%d",j);*/
for(; j<=tol && m!=0; j++)
fseek(fp,sizeof(info)*(j+1),0);
fread(&info,sizeof(info),1,fp);
fseek(fp,sizeof(info)*j,0);
fwrite(&info,sizeof(info),1,fp);
if(m!=0)
--tol;
printf("删除成功");
rewind(fp);fprintf(fp,"%d",tol); printf("%d",tol);
fclose(fp);
if ((fp1=fopen("info.bxt","rb+"))==NULL)
printf("cannot open file ");
exit (0);
if ((fp2=fopen("test.bxt","wb+"))==NULL)
printf("cannot open file ");
exit (0);
while(!feof(fp1))
ch=fgetc(fp1);
fputc(ch,fp2);
if (ftell(fp1)==(sizeof(info)*(tol+1)))
break;
rewind(fp2);fclose(fp1);
if ((fp1=fopen("info.bxt","wb+"))==NULL)
printf("cannot open file ");
exit (0);
while(!feof(fp2))
ch=fgetc(fp2);
fputc(ch,fp1);
if (ftell(fp2)==(sizeof(info)*(tol+1)))
break;
/* fscanf(fp2,"%d",&tol);*/
fclose(fp1);
fclose(fp2);
dele_menu();
/*删除记录菜单的显示*/
int dele_menu()
int key;
printf("\n\n\n");
disp_str(' ',25);
printf("是否继续删除记录?\n");
disp_str(' ',10);disp_str('*',50);
putchar('\n');
disp_str(' ',17); putchar('*'); printf(" 1.是,继续删除记录\n");
disp_str(' ',17); putchar('*'); printf(" 2.否,返回主菜单\n");
disp_str(' ',17); putchar('*'); printf(" 3.否,退出系统\n");
disp_str(' ',10); putchar('*'); disp_str('*',50); putchar('\n');
disp_str(' ',17); printf("请输入(1~3)其他键退出:\n");
scanf("%d",&key);
switch(key)
case 1:
clrscr();/*清屏*/
dele();
dele_menu();
break;
case 2:
clrscr();/*清屏*/
menu();
break;
case 3:
exit(0);
break;
default:
exit(0);
/*主函数*/
void main(void)
creat();
menu();
/* disp_arr( info,100);show_num(); dele();*/
getch();
参考技术A #include <iomanip>
#include <iostream>
#include <fstream>
#include <vector>
#include <conio.h>
#include <stdlib.h>
#include <string>
#include <process.h>
#include <algorithm>
#include <stdio.h>
using namespace std;
struct student
char name[10]; /// 姓名
char id[10]; /// 学号
float chinese; /// 语文分数
float math; /// 数学分数
float English; /// 英语分数
float toal; /// 总分
student *next;
;
///////////-------定义类-----------------------////////////
class stud
student *p1,*p2,*head;
public:
~stud() /////----析构函数------------------------
while(head)
p1=head->next;
delete head;
head=p1;
///------------成员函数------------
void output(student *head); // 输出学生成绩
student * input(student *head); // 增加学生记录
student* del(student *head, char*p); // 删除记录
student* find(student *head,char *p,int &n); // 查找学生记录(可查找多个同名数据)
student* stat(student *head); //排序统计学生总分
friend void total(student*head); //统计学生总分
student* insert(student *head); //按学生总分插入记录
student* clear(student *head); // 删除当前表
void Inputs(student *p); //用于添加数据的子函数
;//----------------------------------------------------
////---------用于添加数据的子函数-------///////
void stud::Inputs(student*p)
cout<<setw(6)<<"姓名"<<setw(8)<<" 学号"
<<setw(8)<<"语文"<<setw(8)<<"数学"
<<setw(8)<<"英语"<<endl;
cin>>p->name >>p->id;
cin >>p->chinese;
while(cin.fail())
cerr<<"您的输入有误,请重新输入"<<endl;
cin.clear ();
cin.sync ();
cin>>p->chinese;
cin>>p->math;
while(cin.fail())
cerr<<"您的输入有误,请重新输入"<<endl;
cin.sync ();
cin.clear ();
cin>>p->math;
cin>>p->English;
while(cin.fail())
cerr<<"您的输入有误,请重新输入"<<endl;
cin.clear ();
cin.sync ();
cin>>p->English;
total(p); //计算出总分
////////-----输出学生成绩-----------------/////////////////////
void stud::output (student *head)
p1=head;
while(p1!=NULL)
cout<<setw(6)<<p1->name<<setw(8)
<<p1->id<<setw(8)<<p1->chinese
<<setw(8)<<p1->math<<setw(8)
<<p1->English<<setw(7)<<p1->toal <<endl;
p1=p1->next ;
/////////------------插入学生成绩记录--------////////////////
student* stud::insert(student *head)
p1=new student;
Inputs(p1); //调用子函数 增加数据
p2=head;
student* p3=NULL;
while((p2->toal < p1->toal) && p2->next !=NULL)
p3=p2;
p2=p2->next;
if(p2->toal > p1->toal)
p1->next=p2;
if(p3==NULL) // 若当前值是最小的
return p1;
p3->next =p1;
return head;
else
p2->next=p1;
p1->next=NULL;
return head;
//////----------清空数据------------/////////////
student* stud::clear(student*head)
while(head)
p1=head->next ;
delete head;
head=p1;
return head;
//////////-----------排序统计函数-----------/////////////////
student *stud::stat(student *head)
p2=head;
p1=p2->next;
while(p2->next) //冒泡法, `~~~
if(p2->toal > p1->toal)
// 把头指针指向当前比较小的节点
p2->next=p1->next;
p1->next=head;
head=p1;
// 把用于比较的两个指针复位
//p2=head;
p1=p2->next ;
else
// 指向下一个节点
p2=p2->next ;
p1=p2->next ;
//-------------------------------------------
cout<<"当前表以按学生总分排序成功"<<endl;
return head;
/////-----------删除记录-----------//////////////////////
student* stud::del (student *head,char *p)
p1=head;
p2=NULL;
while(strcmp(p1->name ,p)&& p1->next !=NULL)
p2=p1;
p1=p1->next ;
if(!strcmp(p1->name ,p))
if(p1==head)
head=p1->next;
else
p2->next=p1->next ;
cout<<"删除成功,OK"<<endl;
delete p1;
else
cout<<" 没找到姓名"<<p<<"的学生.\n"; //结点没找到
return head ;
///////----------统计总分---------------///////////////
void total(student *p)
p->toal = p->chinese + p->math+ p->English;
///////-------------查找函数----------///////////////////
student* stud::find (student *head,char *p,int& n)
p2=head;
while(strcmp(p2->name ,p) !=0 && p2->next !=NULL)
p2=p2->next ;
if(0==strcmp(p2->name,p))
cout<<setw(6)<<p2->name<<setw(8)
<<p2->id<<setw(8)<<p2->chinese
<<setw(8)<<p2->math <<setw(8)
<<p2->English <<setw(7)<<p2->toal <<endl;
n++;
return p2;
else
if(n==0)
system("cls");
cout<<"对不起,没有您要查找的学生数据"<<endl;
return NULL;
///////----------------增加学生记录-----------////////////////////////////
student *stud::input (student *head)
p1=new student;
p2=head;
Inputs(p1); //调用子函数 增加数据
if(head ==NULL)
head=p1;
p1->next =NULL;
return head;
while(p2->next !=NULL)
p2=p2->next;
p2->next=p1;
p1->next=NULL;
return head;
//----------- 输出错误 -----------//////////
void error()
cout<<"错误,这还是一张空表,请输入数据"<<endl;
getch();
///////////////////------------main函数--------//////////////////-----------
int main(void)
stud stus;
student *head=NULL;
student *pd; //临时指针, 用于查找函数
char choice; //用于存放用户的选择项
char name[10]; //查找,删除记录的 key
while(1)
system("cls");
cout<<"学生成绩管理系统"<<endl;
cout<<"1.增加学生成绩 "<<endl;
cout<<"2.显示学生成绩 "<<endl;
cout<<"3.排序统计成绩 "<<endl;
cout<<"4.查找学生成绩 "<<endl;
cout<<"5.删除学生成绩 "<<endl;
cout<<"6.插入学生成绩 "<<endl;
cout<<"7.清空所有数据 "<<endl;
cout<<"8.安全退出系统 "<<endl;
cout<<" 请输入您的选择(0--8):";cout<<endl;
int n=0; //计数器,用于在查找时计算有没有同名学生
cin>>choice;
fflush(stdin);
if(choice=='8') //安全退出
cout<<"谢谢使用,再见"<<endl;
exit(0);
//------------------------------------------------
switch(choice)
case '1':
head=stus.input (head);
break;//------------------------------------------------
case '2':
if(head==NULL)
error();
break;
cout<<setw(6)<<"姓名"<<setw(8)<<" 学号"
<<setw(8)<<"语文"<<setw(8)<<"数学"
<<setw(8)<<"英语"<<setw(13)<<"总分!!!"<<endl;
stus.output (head);
getch();
break;//------------------------------------------------
case '3':
if(head==NULL)
error();
break;
head=stus.stat(head);
getch();
break;//------------------------------------------------
case '4':
if(head ==NULL)
error(); //调用函数输出错误信息
break;
cout<<"请输入想要查找的学生姓名"<<" ,"<<"本系统可以查找重复姓名学生"<<endl;
cin>>name;
pd=head;
cout<<setw(6)<<"姓名"<<setw(8)<<" 学号"
<<setw(8)<<"语文"<<setw(8)<<"数学"
<<setw(8)<<"英语"<<setw(13)<<"总分!!!"<<endl;
while(pd) // 循环调用函数, 用于输出多个的同名学生成绩
pd=stus.find (pd,name,n);
if(pd==NULL)
break;
pd=pd->next ; //指针指向当前以找到的下一个节点,用于查找多个同名学生
getch();
break;//------------------------------------------------
case '5':
if(head==NULL)
error();
break;
cout<<"请输入想要删除学生姓名"<<endl;
cin>>name;
head=stus.del(head,name);
getch();
break;//------------------------------------------------
case '6':
if(head==NULL)
error();
break;
head=stus.stat (head);
head=stus.insert(head);
break;//-----------------------------------------------
case '7':
if(head==NULL)
error();
break;
head=stus.clear(head);
cout<<"删除表成功~"<<endl;
getch();
break;//-----------------------------------------------
default :
cout<<" 对不起,您的输入有误,请重新输入。\n";
getch();
break;
//------------------------------------------------------
getch();
return 0;
本回答被提问者采纳 参考技术B 刚写一半,就已经有2个人给答案拉,休息吧。
vb语言和c语言有啥区别?
一、主体不同
1、vb语言:是Microsoft公司开发的一种通用的基于对象的程序设计语言。
2、c语言:是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。
二、特点不同
1、vb语言:结构化的、模块化的、面向对象的、包含协助开发环境的事件驱动为机制的可视化程序设计语言。
2、c语言:仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。
三、优点不同
1、vb语言:具有丰富的数据类型和众多的内部函数。其采用模块化和结构化程序设计语言,结构清晰,语法简单,容易学习。
2、c语言:提供了许多低级处理的功能,但仍然保持着跨平台的特性,以一个标准规格写出的C语言程序可在包括类似嵌入式处理器以及超级计算机等作业平台的许多计算机平台上进行编译。
参考资料来源:百度百科-c语言
参考资料来源:百度百科-Visual Basic
参考技术Avb语言和c语言区别为:性质不同、基础语言不同、用途不同。
一、性质不同
1、vb语言:vb语言是Microsoft公司开发的一种结构化的、模块化的、面向对象的、包含协助开发环境的事件驱动为机制的可视化程序设计语言。
2、c语言:c语言是诞生于美国的贝尔实验室,由D.M.Ritchie创立的一门面向过程的、抽象化的通用程序设计语言。
二、基础语言不同
1、vb语言:vb语言源自于BASIC编程语言。
2、c语言:c语言以B语言为基础发展而来。
三、用途不同
1、vb语言:vb语言可以使用DAO、RDO、ADO连接数据库,或者轻松的创建Active X控件,用于高效生成类型安全和面向对象的应用程序。
2、c语言:c语言可以生成高质量和高效率的目标代码,故通常应用于对代码质量和执行效率要求较高的嵌入式系统程序的编写。
参考技术B 我正好自己就同时开发C和VB,一般来讲我们后台的数据都是由C语言去写,它更高效,并且在嵌入式linux环境下支持更好,它的语言主要是以描述功能为主,而VB由于它更接近于脚本的同时是面向对象的语言,如果你想非常简单的实现界面功能,那VB和C#是非常好的选择,可以考虑用C做后台,前台用VB做页面本回答被提问者采纳 参考技术C vb是个玩具。你可以编写简单的程序,但是没有办法完成一些相对难的操作。而C语言有点像中间语言比汇编高级一些,比C++、JAVA低一些。(高级不是指更强大而是指更抽象。其实就是说,用汇编编程序麻烦,C语言其次,C++、JAVA简略些。)如果想玩玩就学VB,一些简单的用它来做基本都可以完成而且很方便。如果要做一些难得就该学一学C、C++、JAVA之类的了。 参考技术D 打个比方:C是古文,VB、VC是现代语言,因为可视化了,但一个是英语一个是法语。再就是VB是面向对象的,C是面向过程的。VB和C在语法上有不同的地方,基本的结构没太大变化!这是自己的理解!
以上是关于C语言程序设计的主要内容,如果未能解决你的问题,请参考以下文章