求一个C语言程序。小型数据库。一个管理系统。功能包括:查询,修改等等。。带解释的 谢谢~!

求一个C语言程序。小型数据库。一个管理系统。功能包括:查询,修改等等。。带解释的 谢谢~!,第1张

#include "stdio.h"

#include "stdlib.h"

#include "conio.h"

#include "math.h"

#include "ctype.h"

#include "string.h"

#define MAX 4

#define TERM 6

struct STUD{

unsigned number

char name[20]

unsigned score[MAX]

float average

struct STUD *next

}

struct CLASS{

unsigned no

unsigned students

float score[MAX]

float average

struct STUD *first

}

//输出所有学生的成绩及名次

void output(struct CLASS *pclass)

{

struct STUD *p

int n=0

printf("Class:%u\t number of students:%u\n",pclass->no ,pclass->students )

printf("number name math physics politics "

"english average place\n")

for(n=1,p=pclass->first p!=NULLp=p->next ,++n)

printf("%-8u%-12s%-8u%-8u%-8u%-8u%-10.2f%-d\n",

p->number ,p->name ,p->score[0] ,p->score [1],

p->score [2],p->score [3],p->average ,n)

}

//按平均成绩排序

void sort(struct CLASS *pclass)

{

struct STUD *p, *next, *last

int m,n

for(m=0m<pclass->students -1m++)

for(last=p=pclass->first ,n=0n<pclass->students-1-m

n++,last=p,p=p->next)

if(p->average<p->next->average){

next=p->next

if(p!=pclass->first)

last->next=next

else

pclass->first=next

next->next=p

p=next

}

}

char *cou[MAX]={"math","phusics","politics","english"}

//将链表所有接点写入文件

void write_file(struct CLASS *pclass,FILE *myfile)

{

struct STUD *p

for(p=pclass->firstp!=NULLp=p->next)

fwrite(p,sizeof(struct STUD),1,myfile)

}

//从文件中读数据重建链表

void read_file(struct CLASS *pclass,FILE *myfile)

{

struct STUD buf,*p,*tail

int n

for(tail=pclass->first ,n=0n<pclass->students tail=p,++n){

if(fread(&buf,sizeof(struct STUD),1,myfile)!=1){

pclass->students =n

break

}

p=(struct STUD *) malloc(sizeof(struct STUD))

*p=buf

//连接成先进先出链表

if(pclass->first==NULL)

pclass->first =p

else

tail->next =p

p->next =NULL

}

}

//增加信息

void insert(struct CLASS *pclass)

{

struct STUD *p,*current,*last

int k,ch,flag

do{

p=(struct STUD *) malloc(sizeof(struct STUD))

printf("\ninput number and name of student:")

scanf("%u%s",&p->number ,p->name )

while(1){

for(flag=1,k=0k<MAX++k){

printf("\niput %s:",cou[k])

scanf("%u",&p->score[k])

if(p->score[k]>100)

flag=0

}

if(flag) break

printf("score error\n")

}

p->average =(float)(p->score[0]+p->score[1]+p->score[2]+p->score[3])/4

//找插入点

for(last=current=pclass->firstcurrent->next&¤t->average>p->average

last=current,current=current->next )

if(current->next ==NULL&¤t->average>p->average){

p->next =NULL

current->next =p

}

else{

p->next =current

if(current==pclass->first)

pclass->first =p

else

last->next =p

}

pclass->students ++

printf("continue?(y/n)")

while(isspace(ch=getchar()))

}while (ch=='y'||ch=='Y')

}

//删除学生

void delete_stu(struct CLASS *pclass)

{

unsigned ch

struct STUD *current,*last,*p

do{

printf("\ninput number of student:")

scanf("%u",&p->number,&ch)

for(last=current=pclass->firstcurrent!=NULL&¤t->number!=ch

last=current,current=current->next)

if(current!=NULL){

if(current!=pclass->first)

last->next=current->next

else

pclass->first=current->next

free(current)

pclass->students--

}

else

fprintf(stderr,"error:number of student!\n")

printf("continue?(y/n)")

while(isspace(ch=getchar()))

}while (ch=='y'||ch=='Y')

}

void create(struct CLASS *pclass)

{

struct STUD *p,*tmp=NULL

int n=0,k,ch,flag

do{

p=(struct STUD *) malloc(sizeof(struct STUD))

printf("\ninput number and name of student:")

scanf("%u%s",&p->number ,p->name )

while(1){

for(flag=1,k=0k<MAX++k){

printf("\niput %s:",cou[k])

scanf("%u",&p->score[k])

if(p->score[k]>100)

flag=0

}

if(flag) break

printf("score error\n")

}

p->average =(float)(p->score[0]+p->score[1]+p->score[2]+p->score[3])/4

p->next =pclass->first

pclass->first =p

++n

printf("continue?(y/n)")

while(isspace(ch=getchar()))

}while (ch=='y'||ch=='Y')

pclass->students =n

}

//计算平均分

void average(struct CLASS *pclass)

{

static double general[MAX],g

struct STUD *p

int i

for(p=pclass->firstp!=NULLp=p->next)

for(i=0i<MAX++i)

general[i]+=p->score[i]

printf("\n math physics politics english\n")

for(i=0i<MAX++i){

pclass->score[i]=general[i]/pclass->students

printf("%10.2f",pclass->score[i])

g+=general[i]

}

pclass->average =g/(MAX*pclass->students )

printf("\ngeneral average:%10.2f\n",pclass->average )

}

void main()

{

struct CLASS cla

FILE *fp

int flag=1,k

char c,*menu[]={

"\n1:insert a student\n",

"2:delete a student\n",

"3:save into file\n",

"4:print class score list\n",

"5:stat average\n",

"0:exit\n",

"\nselect[0-6]:"

}

if((fp=fopen("students.dat","rb"))==NULL){

printf("input number of class:")

scanf("%u",&cla.no)

cla.students=0

cla.first=0

create(&cla)

sort(&cla)

}

else{

fread(&cla,sizeof(struct CLASS),1,fp)

cla.first=NULL

read_file(&cla,fp)

fclose(fp)

}

while(flag){

for(k=0k<=TERMk++)

printf("%s",menu[k])

scanf("%d",&k)

switch (k){

case 1:

insert(&cla)

break

case 2:

delete_stu(&cla)

break

case 3:

if((fp=fopen("students.dat","wb"))==NULL){

fprintf(stderr,"error:can't create file students!\n")

return

}

fwrite(&cla,sizeof(struct CLASS),1,fp)

write_file(&cla,fp)

fclose(fp)

break

case 4:

output(&cla)

break

case 5:

average(&cla)

break

case 0:

printf("save yout change?(y/n)")

scanf("%c%*c",&c)

c=='y'||c=='Y'?(c=1):(c==0)

if(c){

if((fp=fopen("students.dat","wb"))==NULL){

fprintf(stderr,"error:can't create file students!\n")

return

}

rewind(fp)

fwrite(&cla,sizeof(struct CLASS),1,fp)

write_file (&cla,fp)

fclose(fp)

}

flag=0

break

default:

fprintf(stderr,"select error!\n")

}

}

}

可以在电脑安装一个MySQL数据库,MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 旗下公司。

下面的是MySQL安装的图解,用的可执行文件安装的,详细说明了一下!打开下载的mysql安装文件mysql-5.0.27-win32.zip,双击解压缩,运行“setup.exe”,出现如下界面

mysql安装图文教程1

mysql安装向导启动,按“Next”继续

mysql图文安装教程2

选择安装类型,有“Typical(默认)”、“Complete(完全)”、“Custom(用户自定义)”三个选项,我们选择“Custom”,有更多的选项,也方便熟悉安装过程:

mysql图文安装教程3

在“Developer Components(开发者部分)”上左键单击,选择“This feature, and all subfeatures, will be installed on local hard drive.”,即“此部分,及下属子部分内容,全部安装在本地硬盘上”。在上面的“MySQL Server(mysql服务器)”、“Client Programs(mysql客户端程序)”、“Documentation(文档)”也如此 *** 作,以保证安装所有文件。点选“Change...”,手动指定安装目录。

mysql图文安装教程4

填上安装目录,我的是“F:\Server\MySQL\MySQL Server 5.0”,也建议不要放在与 *** 作系统同一分区,这样可以防止系统备份还原的时候,数据被清空。按“OK”继续。

mysql图文安装教程5

返回刚才的界面,按“Next”继续

mysql图文安装教程6

确认一下先前的设置,如果有误,按“Back”返回重做。按“Install”开始安装。

mysql图文安装教程7

正在安装中,请稍候,直到出现下面的界面

mysql图文安装教程8

这里是询问你是否要注册一个mysql.com的账号,或是使用已有的账号登陆mysql.com,一般不需要了,点选“Skip Sign-Up”,按“Next”略过此步骤。

mysql图文安装教程9

现在软件安装完成了,出现上面的界面,这里有一个很好的功能,mysql配置向导,不用向以前一样,自己手动乱七八糟的配置my.ini了,将 “Configure the Mysql Server now”前面的勾打上,点“Finish”结束软件的安装并启动mysql配置向导。

mysql图文安装教程10

mysql配置向导启动界面,按“Next”继续

mysql图文安装教程11

选择配置方式,“Detailed Configuration(手动精确配置)”、“Standard Configuration(标准配置)”,我们选择“Detailed Configuration”,方便熟悉配置过程。

mysql图文安装教程12

选择服务器类型,“Developer Machine(开发测试类,mysql占用很少资源)”、“Server Machine(服务器类型,mysql占用较多资源)”、“Dedicated MySQL Server Machine(专门的数据库服务器,mysql占用所有可用资源)”,大家根据自己的类型选择了,一般选“Server Machine”,不会太少,也不会占满。

mysql图文安装教程13

选择mysql数据库的大致用途,“Multifunctional Database(通用多功能型,好)”、“Transactional Database Only(服务器类型,专注于事务处理,一般)”、“Non-Transactional Database Only(非事务处理型,较简单,主要做一些监控、记数用,对MyISAM数据类型的支持仅限于non-transactional),随自己的用途而选择了,我这里选择“Transactional Database Only”,按“Next”继续。

mysql图文安装教程14

对InnoDB Tablespace进行配置,就是为InnoDB 数据库文件选择一个存储空间,如果修改了,要记住位置,重装的时候要选择一样的地方,否则可能会造成数据库损坏,当然,对数据库做个备份就没问题了,这里不详述。我这里没有修改,使用用默认位置,直接按“Next”继续

mysql图文安装教程15

选择您的网站的一般mysql访问量,同时连接的数目,“Decision Support(DSS)/OLAP(20个左右)”、“Online Transaction Processing(OLTP)(500个左右)”、“Manual Setting(手动设置,自己输一个数)”,我这里选“Online Transaction Processing(OLTP)”,自己的服务器,应该够用了,按“Next”继续

mysql图文安装教程16

是否启用TCP/IP连接,设定端口,如果不启用,就只能在自己的机器上访问mysql数据库了,我这里启用,把前面的勾打上,Port Number:3306,在这个页面上,您还可以选择“启用标准模式”(Enable Strict Mode),这样MySQL就不会允许细小的语法错误。如果您还是个新手,我建议您取消标准模式以减少麻烦。但熟悉MySQL以后,尽量使用标准模式,因为它可以降低有害数据进入数据库的可能性。按“Next”继续

mysql图文安装教程17

西文编码,第二个是多字节的通用utf8编码,都不是我们通用的编码,这里选择第三个,然后在Character Set那里选择或填入“gbk”,当然也可以用“gb2312”,区别就是gbk的字库容量大,包括了gb2312的所有汉字,并且加上了繁体字、和其它乱七八糟的字——使用mysql的时候,在执行数据 *** 作命令之前运行一次“SET NAMES GBK”(运行一次就行了,GBK可以替换为其它值,视这里的设置而定),就可以正常的使用汉字(或其它文字)了,否则不能正常显示汉字。按 “Next”继续。

mysql图文安装教程18

选择是否将mysql安装为windows服务,还可以指定Service Name(服务标识名称),是否将mysql的bin目录加入到Windows PATH(加入后,就可以直接使用bin下的文件,而不用指出目录名,比如连接,“mysql.exe -uusername -ppassword”就可以了,不用指出mysql.exe的完整地址,很方便),我这里全部打上了勾,Service Name不变。按“Next”继续。选择是否将mysql安装为windows服务,还可以指定Service Name(服务标识名称),是否将mysql的bin目录加入到Windows PATH(加入后,就可以直接使用bin下的文件,而不用指出目录名,比如连接,“mysql.exe -uusername -ppassword”就可以了,不用指出mysql.exe的完整地址,很方便),我这里全部打上了勾,Service Name不变。按“Next”继续。

mysql图文安装教程19

这一步询问是否要修改默认root用户(超级管理)的密码(默认为空),“New root password”如果要修改,就在此填入新密码(如果是重装,并且之前已经设置了密码,在这里更改密码可能会出错,请留空,并将“Modify Security Settings”前面的勾去掉,安装配置完成后另行修改密码),“Confirm(再输一遍)”内再填一次,防止输错。 “Enable root access from remote machines(是否允许root用户在其它的机器上登陆,如果要安全,就不要勾上,如果要方便,就勾上它)”。最后“Create An Anonymous Account(新建一个匿名用户,匿名用户可以连接数据库,不能 *** 作数据,包括查询)”,一般就不用勾了,设置完毕,按“Next”继续。

mysql图文安装教程20

确认设置无误,如果有误,按“Back”返回检查。按“Execute”使设置生效。

设置完毕,按“Finish”结束mysql的安装与配置——这里有一个比较常见的错误,就是不能“Start service”,一般出现在以前有安装mysql的服务器上,解决的办法,先保证以前安装的mysql服务器彻底卸载掉了;不行的话,检查是否按上面一步所说,之前的密码是否有修改,照上面的 *** 作;如果依然不行,将mysql安装目录下的data文件夹备份,然后删除,在安装完成后,将安装生成的 data文件夹删除,备份的data文件夹移回来,再重启mysql服务就可以了,这种情况下,可能需要将数据库检查一下,然后修复一次,防止数据出错。

oracle和DB2都可以的,一般C/s管理系统是在windows下面跑的,SQL/Server微软这三个都的东东,这三个都很贵,而mysql则是免费的,具体看你对哪种数据库比较熟悉!


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6699226.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-26
下一篇 2023-03-26

发表评论

登录后才能评论

评论列表(0条)

保存